Здравствуйте, Павел Кузнецов, Вы писали:
ПК> public static IntWrapper operator -(IntWrapper l, IntWrapper r)
ПК> {
ПК> return new IntWrapper(l.value_ - r.value_);
ПК> }
ПК> public int CompareTo(IntWrapper r)
ПК> {
ПК> return this - r;
ПК> }
ПК> DelegateTest<IntWrapper>.CompareElement compare_element_delegate =
ПК> delegate(IntWrapper x, IntWrapper y) { return x - y; };
ПК>
ПК>(*) Правда, оказалось, что то ли сортировка там не вполне сортирует, то ли поиск не вполне ищет, то ли
Прогаммисты хреновые...
ПК> и то, и другое, но это нам сейчас совершенно неважно
А, ну, да. У теста провекрки на вшивость не проходят, но это не важно... Разве это может повлиять на результат?
Обрати внимание на приведенные мною фрагменты твоего теста. Заметил выделенное жирным? Вот из-за них и тесты глючат. У тебя в массивах явно попадаются отрицательные велечины и когда ты большую отрицательную величину вычиташь из большой положительной, то происходит переполнение, которое без дополнительной обработки (которую только на ассемблере сделать можно) приводит к неверному результату сравнения. После этого никакие результаты уже не интересны, так как сортировка просходит абы как.
Я вот заменил в твоем тесте:
public int CompareTo(IntWrapper r)
{
return this - r;
}
на:
public int CompareTo(IntWrapper r)
{
return value_ - r.value_;
}
и получил удвоение производительности этого глюкалова.

Вот только что я измеряю хоть убей сказать не могу.
Убедиться в моей правоте можно включив проверку переполения. Для Шарпа это делается в "Project\Properties+Build+Advanced".
В общем, нужно или делать проверку полноценной:
return _value > r._value ? 1 : _value == r._value ? 0 : -1;
или заменять делегаты и интерфейсы на содержащие метод Great и использовать в алгоритме сортировки его.
ПК>, поэтому прошу по этому поводу не пинать:
ПК> в любом случае, алгоритмы и в C#, и в C++ одни и те же, так что на время, что нас и интересует, это влиять не должно.
Ага. И главное полная гарантия, что переполнение обрабатывается одинаково и никаких проблем нет.
Как я уже сказал, замена пары байт кода в товем тесте сравнивает результаты (правда вывод этот основан на относительных результатах, так как С++-ного проекта у меня нет).
В общем, присылай С++-шный проект посмотрим...
... << RSDN@Home 1.1.4 beta 3 rev. 273>>