Cancellare un array di elementi definiti - pagina 13

 
Maxim Kuznetsov:

Optimizer non è coinvolto - ci sono la metà dei confronti...

Passare attentamente attraverso i tatti e vedere che la piena coincidenza della logica
ZS. Aspetta, però ho esitato.
 

Solo un mini refactoring ("Perché non si può essere così belli nel mondo..."):

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

//..............................................

Risultato:
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 микросекунд
File:
 
Sergey Dzyublik:

Solo un mini refactoring ("Perché non si può essere così belli nel mondo..."):

Proprio sopra ho chiesto - prova a mettere l'array originale come serie. ArraySetAsSeries(...,true);

Questa è una domanda abbastanza rilevante - per vedere quali metodi non funzionano affatto con le serie, e quali sono inaspettatamente lenti

Non importa con il filtraggio dell'array, la domanda sulle serie è più pratica

 
Sergey Dzyublik:

Solo un mini refactoring ("Perché non si può essere così belli nel mondo..."):

Grazie, Sergei, per un'utile lezione di qualità. :)

 

Spostato @Maxim Kuznetsov in una categoria separata, funzioni diverse dopo tutto

Test raccomandati con errori (Semko e Pavlov).

Aggiunta la tua variante

P.S. E i template devono essere rimossi, è anche un potenziale errore quando si confrontano i doppi

File:
 
Stanislav Dray:

Spostato @Maxim Kuznetsov in una categoria separata, funzioni diverse dopo tutto

Test raccomandati con errori (Semko e Pavlov).

Aggiunta la tua variante

P.S. Anche i template devono essere rimossi, è un potenziale errore nel confrontare i doppi

Ha reso gli ultimi due elementi dell'array uguali a Value. Semko non ha errori. Per favore, mostraci l'errore in quale caso. Non è molto sensato buttare fuori un leader.

Quali sono gli errori con il doppio che sono causati dalla loro normalizzazione? Quindi, se lavorate con un array di doppi, dovete preoccuparvi di mettere voi stessi i dati normalizzati nell'array.

 
Dmitry Fedoseev:

Ha reso gli ultimi due elementi dell'array uguali a Value. Semko non ha errori. Mostratemi in quale caso ha degli errori. Non è giusto buttare fuori il leader.

Quali sono gli errori con il doppio che sono causati dalla loro normalizzazione? Se stiamo lavorando con un array di doppi, dovremo aggiungere noi stessi i dati normalizzati nell'array.

Ho appena commentato il codice, probabilmente non l'hai notato. Un errore se l'ultimo elemento dell'array rientra nella condizione di cancellazione, cioè è uguale a Value.

Non l'ho rimosso dal codice :), solo per evitare che qualcuno copi l'errore. Penso che Nikolay correggerà il suo codice e tornerà da solo :)

Per quanto riguarda i template: ci sarà un errore quando si passa il doppio, poiché la funzione non è corretta nel confronto dei numeri reali, o meglio, semplicemente non è progettata per questo, quindi prima di mettere un template, dovremmo assicurarci che la funzione funzioni correttamente con qualsiasi tipo.

1

 
Stanislav Dray:

Ho commentato il codice, probabilmente non l'hai notato. L'errore è se l'ultimo elemento dell'array rientra nella condizione di cancellazione, cioè è uguale a Value

Non l'ho rimosso dal codice :), solo per evitare che qualcuno lo copi con un errore. Penso che Nikolay correggerà il suo codice e tornerà da solo :)

E riguardo ai template: ci sarà un errore quando si passa il doppio, poiché la funzione non è corretta nel confronto dei numeri reali, o meglio semplicemente non è pensata per questo, quindi prima di mettere un template, dovreste assicurarvi che la funzione funzioni correttamente con qualsiasi tipo.


E cosa c'era da notare? Questo: "array corrotto se uno o più dei suoi ultimi elementi rientrano in una condizione"? Questo è quello che ho scritto sopra - non ha funzionato. Posso vedere dal tuo screenshot che non è il punto. L'errore sembra verificarsi quando il numero di elementi è piccolo.

Che tipo di errore si verificherebbe con il doppio? Perché? Qualsiasi dato si trovi nell'array funzionerà in questo modo. Se volete che funzioni correttamente, dovreste eseguire la normalizzazione prima di metterlo in un array. Ma non dovreste inserire la normalizzazione nella funzione stessa. La funzione va perfettamente bene con il modello e funzionerà bene con il doppio, se la usi correttamente.

Il fatto che tutti si siano improvvisamente preoccupati del problema del doppio è molto buono.

 
Dmitry Fedoseev:

Cosa c'era da notare? Questo: "L'array è corrotto se uno o più degli ultimi elementi rientrano nella condizione"? È quello che ho scritto sopra, che non ha funzionato. Come puoi vedere dal tuo screenshot, non è questo il punto. L'errore sembra verificarsi quando il numero di elementi è piccolo.

Che tipo di errore si verificherebbe con il doppio? Perché? Qualsiasi dato si trovi nell'array funzionerà in questo modo. Se volete che funzioni correttamente, dovreste eseguire la normalizzazione prima di metterlo in un array. Ma non dovreste inserire la normalizzazione nella funzione stessa. La funzione va perfettamente bene con il template e funzionerà bene se la usi correttamente.

Il fatto che tutti si preoccupino improvvisamente del problema del doppio è molto buono, ma bisogna essere saggi al riguardo.

Tu ed io abbiamo punti di vista diversi su come la funzione dovrebbe funzionare. Una funzione è una funzione in Africa e dovrebbe funzionare senza alcuna preparazione di dati, tutto deve funzionare internamente.

P.S. In realtà nessuno si preoccupa, non sono davvero preoccupato. Ho appena scritto che i modelli qui come quinta gamba di un cane e un possibile errore

 
Stanislav Dray:

Una funzione è una funzione e dovrebbe funzionare senza alcuna preparazione di dati, tutto dovrebbe funzionare internamente.

Questo è l'asilo.

Motivazione: