Просто мини рефакторинг ("Потому что нельзя быть на свете красивой такой..."):
#define BENCHMARK_TEST(function, test_name) \
ArrayCopy(arr2,arr); \
t=GetMicrosecondCount(); \
N=##function(arr2,Value); \
t=GetMicrosecondCount()-t; \
printf("вариант %-12s: Контрольная сумма = %f; элементов - %d; время выполнения - %6d микросекунд", test_name, ControlSumm(arr2), N, t);
voidOnStart()
{
srand(1);
int N;
ulong t;
int Value=rand()%1000; // значение, которое нужно удалить из массиваint arr[]; // исходный массивint arr2[]; // создаем еще один массив для теста и копируем в него исходный массивArrayResize(arr,1000000);
for(int i=0; i<1000000;i++){
arr[i]=rand()%1000; //генерируем исходный массив случайными значениями от 0 до 1000
}
BENCHMARK_TEST(ArrayDeleteVal1, "Pastushak");
BENCHMARK_TEST(arrayFilter, "Korotky");
BENCHMARK_TEST(DelEl2, "Fedoseev");
BENCHMARK_TEST(ArrayDeleteVal, "Semko");
BENCHMARK_TEST(ArrayModify, "Pavlov");
BENCHMARK_TEST(arrayFilter2, "Nikitin");
BENCHMARK_TEST(ArrayDelV, "Vladimir");
BENCHMARK_TEST(PeterArray, "Peter");
BENCHMARK_TEST(arrayFilter3, "Kuznetsov");
}
//..............................................
Результат:
2018.11.1501:11:13.670 Test (EURUSD,H1) вариант Pastushak : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения - 127587 микросекунд
2018.11.1501:11:13.675 Test (EURUSD,H1) вариант Korotky : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения - 2530 микросекунд
2018.11.1501:11:13.679 Test (EURUSD,H1) вариант Fedoseev : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения - 1995 микросекунд
2018.11.1501:11:13.681 Test (EURUSD,H1) вариант Semko : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения - 854 микросекунд
2018.11.1501:11:13.686 Test (EURUSD,H1) вариант Pavlov : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения - 3239 микросекунд
2018.11.1501:11:13.692 Test (EURUSD,H1) вариант Nikitin : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения - 3812 микросекунд
2018.11.1501:11:13.698 Test (EURUSD,H1) вариант Vladimir : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения - 4037 микросекунд
2018.11.1501:11:13.707 Test (EURUSD,H1) вариант Peter : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения - 7855 микросекунд
2018.11.1501:11:13.710 Test (EURUSD,H1) вариант Kuznetsov : Контрольная сумма = 7224.813498; элементов - 998994; время выполнения - 744 микросекунд
Перенёс @Maxim Kuznetsov в отдельную категорию, всё таки разные функции
Закоментил тесты содержащие ошибки (Semko и Pavlov) .
Добавил свой вариант
P.S. Да и шаблоны нужно убрать, это тоже потенциальная ошибка при сравнении double
Сделал два последних элемента массива равными Value. У Semko не наблюдается ошибок. Покажите, в каком случае у него ошибки. А то так не честно лидера выкидывать ,не спортивно.
Что за ошибки с double, которые их-за нормализации? Так если работать с массивом double, надо самостоятельно побеспокоиться, что бы складывать в массив нормализованные данные.
Сделал два последних элемента массива равными Value. У Semko не наблюдается ошибок. Покажите, в каком случае у него ошибки. А то так не честно лидера выкидывать ,не спортивно.
Что за ошибки с double, которые их-за нормализации? Так если работать с массивом double, надо самостоятельно побеспокоиться, что бы складывать в массив нормализованные данные.
Я же прокоментировал в коде, вы наверное не заметили. Ошибка если последний элемент массива попадает под условие удаление, тоест равен Value
Я же не созла выкинул из кода :), просто чтоб ни кто не скопипастил с ошибкой. Я думаю Николай поправит свой код и сам себя вернёт :)
А на счёт шаблонов: будет ошибка при передачи double, так как в функции неверное сравнение вещественных чисел, вернее она просто для этого не предназначена,поэтому прежде чем ставит шаблон, нужно было убедится что функция коректно отработает с любыми типами.
Я же прокоментировал в коде, вы наверное не заметили. Ошибка если последний элемент массива попадает под условие удаление, тоест равен Value
Я же не созла выкинул из кода :), просто чтоб ни кто не скопипастил с ошибкой. Я думаю Николай поправит свой код и сам себя вернёт :)
А на счёт шаблонов: будет ошибка при передачи double, так как в функции неверное сравнение вещественных чисел, вернее она просто для этого не предназначена,поэтому прежде чем ставит шаблон, нужно было убедится что функция коректно отработает с любыми типами.
А что нужно было заметить? Вот это: "Повреждение массива если один или несколько последних элементов попадают под условие"? Про это и писал выше, что не сработало. Как по вашему скриншоту сейчас видно, дело не в этом. Вроде как при малом количестве данных случается ошибка.
Какая ошибка при double будет? С чего вдруг? Какие данные находятся в массиве так и сработает. Если надо, что бы правильно работало, перед помещением в массив, надо выполнять нормализацию. Но только не в саму функцию вставлять нормализацию. Функция прекрасно под шаблон идет и прекрасно будет с double работать, если правильно ей пользоваться.
То что все вдруг стали озабочены проблемой double - это очень хорошо, только с головой надо к делу подходить.
А что нужно было заметить? Вот это: "Повреждение массива если один или несколько последних элементов попадают под условие"? Про это и писал выше, что не сработало. Как по вашему скриншоту сейчас видно, дело не в этом. Вроде как при малом количестве данных случается ошибка.
Какая ошибка при double будет? С чего вдруг? Какие данные находятся в массиве так и сработает. Если надо, что бы правильно работало, перед помещением в массив, надо выполнять нормализацию. Но только не в саму функцию вставлять нормализацию. Функция прекрасно под шаблон идет и прекрасно будет с doubkle работать, если правильно ей пользоваться.
То что все вдруг стали озабочены проблемой double - это очень хорошо, только с головой надо к делу подходить.
У нас с вами разные взгляды как должна работать функция.функция она и в Африке функция и должна работать без всякой подготовки данных ,всё должно работать внутри.Человек который её скопипастит ни чего не знает про подготовку данных , да и не должен знать.
P.S. Да собственно ни кто и не озабочен, мне как-то фиолетово. Я просто написал, что темплейты тут как собаке 5-я нога и возможная потенциальная ошибка
У нас с вами разные взгляды как должна работать функция.функция она и в Африке функция и должна работать без всякой подготовки данных ,всё должно работать внутри.Человек который её скопипастит ни чего не знает про подготовку данных , да и не должен знать.
оптимизатор непричём - сравнений меньше в 2 раза..
Просто мини рефакторинг ("Потому что нельзя быть на свете красивой такой..."):
Результат:
Просто мини рефакторинг ("Потому что нельзя быть на свете красивой такой..."):
Чуть выше вопрошал - попробуйте исходный массив поставить как серию. ArraySetAsSeries(..,true);
довольно актуальный вопрос - глянуть какие приёмы не работают с сериями вообще, а какие нежданно тормозят
фик с ней с фильтрацией массива, вопрос про серии практичнее
Просто мини рефакторинг ("Потому что нельзя быть на свете красивой такой..."):
Спасибо, Сергей, за полезный качественный урок. :)
Перенёс @Maxim Kuznetsov в отдельную категорию, всё таки разные функции
Закоментил тесты содержащие ошибки (Semko и Pavlov) .
Добавил свой вариант
P.S. Да и шаблоны нужно убрать, это тоже потенциальная ошибка при сравнении double
Перенёс @Maxim Kuznetsov в отдельную категорию, всё таки разные функции
Закоментил тесты содержащие ошибки (Semko и Pavlov) .
Добавил свой вариант
P.S. Да и шаблоны нужно убрать, это тоже потенциальная ошибка при сравнении double
Сделал два последних элемента массива равными Value. У Semko не наблюдается ошибок. Покажите, в каком случае у него ошибки. А то так не честно лидера выкидывать ,не спортивно.
Что за ошибки с double, которые их-за нормализации? Так если работать с массивом double, надо самостоятельно побеспокоиться, что бы складывать в массив нормализованные данные.
Сделал два последних элемента массива равными Value. У Semko не наблюдается ошибок. Покажите, в каком случае у него ошибки. А то так не честно лидера выкидывать ,не спортивно.
Что за ошибки с double, которые их-за нормализации? Так если работать с массивом double, надо самостоятельно побеспокоиться, что бы складывать в массив нормализованные данные.
Я же прокоментировал в коде, вы наверное не заметили. Ошибка если последний элемент массива попадает под условие удаление, тоест равен Value
Я же не созла выкинул из кода :), просто чтоб ни кто не скопипастил с ошибкой. Я думаю Николай поправит свой код и сам себя вернёт :)
А на счёт шаблонов: будет ошибка при передачи double, так как в функции неверное сравнение вещественных чисел, вернее она просто для этого не предназначена,поэтому прежде чем ставит шаблон, нужно было убедится что функция коректно отработает с любыми типами.
Я же прокоментировал в коде, вы наверное не заметили. Ошибка если последний элемент массива попадает под условие удаление, тоест равен Value
Я же не созла выкинул из кода :), просто чтоб ни кто не скопипастил с ошибкой. Я думаю Николай поправит свой код и сам себя вернёт :)
А на счёт шаблонов: будет ошибка при передачи double, так как в функции неверное сравнение вещественных чисел, вернее она просто для этого не предназначена,поэтому прежде чем ставит шаблон, нужно было убедится что функция коректно отработает с любыми типами.
А что нужно было заметить? Вот это: "Повреждение массива если один или несколько последних элементов попадают под условие"? Про это и писал выше, что не сработало. Как по вашему скриншоту сейчас видно, дело не в этом. Вроде как при малом количестве данных случается ошибка.
Какая ошибка при double будет? С чего вдруг? Какие данные находятся в массиве так и сработает. Если надо, что бы правильно работало, перед помещением в массив, надо выполнять нормализацию. Но только не в саму функцию вставлять нормализацию. Функция прекрасно под шаблон идет и прекрасно будет с double работать, если правильно ей пользоваться.
То что все вдруг стали озабочены проблемой double - это очень хорошо, только с головой надо к делу подходить.
А что нужно было заметить? Вот это: "Повреждение массива если один или несколько последних элементов попадают под условие"? Про это и писал выше, что не сработало. Как по вашему скриншоту сейчас видно, дело не в этом. Вроде как при малом количестве данных случается ошибка.
Какая ошибка при double будет? С чего вдруг? Какие данные находятся в массиве так и сработает. Если надо, что бы правильно работало, перед помещением в массив, надо выполнять нормализацию. Но только не в саму функцию вставлять нормализацию. Функция прекрасно под шаблон идет и прекрасно будет с doubkle работать, если правильно ей пользоваться.
То что все вдруг стали озабочены проблемой double - это очень хорошо, только с головой надо к делу подходить.
У нас с вами разные взгляды как должна работать функция.функция она и в Африке функция и должна работать без всякой подготовки данных ,всё должно работать внутри.Человек который её скопипастит ни чего не знает про подготовку данных , да и не должен знать.
P.S. Да собственно ни кто и не озабочен, мне как-то фиолетово. Я просто написал, что темплейты тут как собаке 5-я нога и возможная потенциальная ошибка
У нас с вами разные взгляды как должна работать функция.функция она и в Африке функция и должна работать без всякой подготовки данных ,всё должно работать внутри.Человек который её скопипастит ни чего не знает про подготовку данных , да и не должен знать.
Это детский сад.