Очистка массива от заданного (ых) элементов - страница 13

 
Maxim Kuznetsov:

оптимизатор непричём -  сравнений меньше в 2 раза..

Внимательно по тактам пройдитесь и увидите что полное совпадение логики
ЗЫ. Хотя, стоп, засомневался.
 

Просто мини рефакторинг ("Потому что нельзя быть на свете красивой такой..."):

#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);


void OnStart()
{
   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.15 01:11:13.670 Test (EURUSD,H1)        вариант Pastushak   : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения - 127587 микросекунд
2018.11.15 01:11:13.675 Test (EURUSD,H1)        вариант Korotky     : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения -   2530 микросекунд
2018.11.15 01:11:13.679 Test (EURUSD,H1)        вариант Fedoseev    : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения -   1995 микросекунд
2018.11.15 01:11:13.681 Test (EURUSD,H1)        вариант Semko       : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения -    854 микросекунд
2018.11.15 01:11:13.686 Test (EURUSD,H1)        вариант Pavlov      : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения -   3239 микросекунд
2018.11.15 01:11:13.692 Test (EURUSD,H1)        вариант Nikitin     : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения -   3812 микросекунд
2018.11.15 01:11:13.698 Test (EURUSD,H1)        вариант Vladimir    : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения -   4037 микросекунд
2018.11.15 01:11:13.707 Test (EURUSD,H1)        вариант Peter       : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения -   7855 микросекунд
2018.11.15 01:11:13.710 Test (EURUSD,H1)        вариант Kuznetsov   : Контрольная сумма = 7224.813498; элементов - 998994; время выполнения -    744 микросекунд
Файлы:
 
Sergey Dzyublik:

Просто мини рефакторинг ("Потому что нельзя быть на свете красивой такой..."):

Чуть выше вопрошал - попробуйте исходный массив поставить как серию. ArraySetAsSeries(..,true);

довольно актуальный вопрос - глянуть какие приёмы не работают с сериями вообще, а какие нежданно тормозят

фик с ней с фильтрацией массива, вопрос про серии практичнее

 
Sergey Dzyublik:

Просто мини рефакторинг ("Потому что нельзя быть на свете красивой такой..."):

Спасибо, Сергей, за полезный качественный урок. :)

 

Перенёс @Maxim Kuznetsov   в отдельную категорию, всё таки разные функции

Закоментил тесты содержащие ошибки (Semko и Pavlov) .

Добавил свой вариант

P.S. Да и шаблоны нужно убрать, это тоже потенциальная ошибка при сравнении double

Файлы:
 
Stanislav Dray:

Перенёс @Maxim Kuznetsov   в отдельную категорию, всё таки разные функции

Закоментил тесты содержащие ошибки (Semko и Pavlov) .

Добавил свой вариант

P.S. Да и шаблоны нужно убрать, это тоже потенциальная ошибка при сравнении double

Сделал два последних элемента массива равными Value. У Semko не наблюдается ошибок. Покажите, в каком случае у него ошибки. А то так не честно лидера выкидывать ,не спортивно.

Что за ошибки с double, которые их-за нормализации? Так если работать с массивом double, надо самостоятельно побеспокоиться, что бы складывать в массив нормализованные данные.

 
Dmitry Fedoseev:

Сделал два последних элемента массива равными Value. У Semko не наблюдается ошибок. Покажите, в каком случае у него ошибки. А то так не честно лидера выкидывать ,не спортивно.

Что за ошибки с double, которые их-за нормализации? Так если работать с массивом double, надо самостоятельно побеспокоиться, что бы складывать в массив нормализованные данные.

Я же прокоментировал в коде, вы наверное не заметили. Ошибка если последний элемент массива попадает под условие удаление, тоест равен Value

Я же не созла выкинул из кода :), просто чтоб ни кто не скопипастил с ошибкой. Я думаю Николай поправит свой код и сам себя вернёт :)

А на счёт шаблонов: будет ошибка при передачи double, так как в функции неверное сравнение вещественных чисел, вернее она просто для этого не предназначена,поэтому прежде чем ставит шаблон, нужно было убедится что функция коректно отработает с любыми типами.

1

 
Stanislav Dray:

Я же прокоментировал в коде, вы наверное не заметили. Ошибка если последний элемент массива попадает под условие удаление, тоест равен Value

Я же не созла выкинул из кода :), просто чтоб ни кто не скопипастил с ошибкой. Я думаю Николай поправит свой код и сам себя вернёт :)

А на счёт шаблонов: будет ошибка при передачи double, так как в функции неверное сравнение вещественных чисел, вернее она просто для этого не предназначена,поэтому прежде чем ставит шаблон, нужно было убедится что функция коректно отработает с любыми типами.


А что нужно было заметить? Вот это: "Повреждение массива если один или несколько последних элементов попадают под условие"? Про это и писал выше, что не сработало.  Как по вашему скриншоту сейчас видно, дело не в этом. Вроде как при малом количестве данных случается ошибка.

Какая ошибка при double будет? С чего вдруг? Какие данные находятся в массиве так и сработает. Если надо, что бы правильно работало, перед помещением в массив, надо выполнять нормализацию. Но только не в саму функцию вставлять нормализацию. Функция прекрасно под шаблон идет и прекрасно будет с double работать, если правильно ей пользоваться.

То что все вдруг стали озабочены проблемой double - это очень хорошо, только с головой надо к делу подходить. 

 
Dmitry Fedoseev:

А что нужно было заметить? Вот это: "Повреждение массива если один или несколько последних элементов попадают под условие"? Про это и писал выше, что не сработало.  Как по вашему скриншоту сейчас видно, дело не в этом. Вроде как при малом количестве данных случается ошибка.

Какая ошибка при double будет? С чего вдруг? Какие данные находятся в массиве так и сработает. Если надо, что бы правильно работало, перед помещением в массив, надо выполнять нормализацию. Но только не в саму функцию вставлять нормализацию. Функция прекрасно под шаблон идет и прекрасно будет с doubkle работать, если правильно ей пользоваться.

То что все вдруг стали озабочены проблемой double - это очень хорошо, только с головой надо к делу подходить. 

У нас с вами разные взгляды как должна работать функция.функция она и в Африке функция и должна работать без всякой подготовки данных ,всё должно работать внутри.Человек который её скопипастит ни чего не знает про подготовку данных , да и не должен знать. 

P.S. Да собственно ни кто и не озабочен, мне как-то фиолетово. Я просто написал, что темплейты тут как собаке 5-я нога и возможная потенциальная ошибка

 
Stanislav Dray:

У нас с вами разные взгляды как должна работать функция.функция она и в Африке функция и должна работать без всякой подготовки данных ,всё должно работать внутри.Человек который её скопипастит ни чего не знает про подготовку данных , да и не должен знать. 

Это детский сад.