Limpar um conjunto de elementos definidos - página 13

 
Maxim Kuznetsov:

O otimizador não está envolvido - há metade das comparações...

Cuidadosamente, passe pelos fatos e veja que a coincidência total da lógica
ZS. Eu hesitei, no entanto.
 

Apenas um mini refactoring ("Porque você não pode ser tão bonito no mundo..."):

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

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

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

Apenas um mini refactoring ("Porque você não pode ser tão bonito no mundo..."):

Logo acima eu perguntei - tente colocar a matriz original como uma série. ArraySetAsSeries(...,verdadeiro);

Esta é uma questão bastante relevante - para ver quais métodos não funcionam com séries e quais são inesperadamente lentos.

Não importa com a filtragem da matriz, a questão sobre as séries é mais prática

 
Sergey Dzyublik:

Apenas um mini refactoring ("Porque você não pode ser tão bonito no mundo..."):

Obrigado, Sergei, por uma lição útil de qualidade. :)

 

Movido @Maxim Kuznetsov para uma categoria separada, funções diferentes afinal de contas

Testes recomendados com erros (Semko e Pavlov).

Acrescentou sua variante

P.S. E os modelos precisam ser removidos, é também um erro potencial quando se comparam as duplas

Arquivos anexados:
 
Stanislav Dray:

Movido @Maxim Kuznetsov para uma categoria separada, funções diferentes afinal de contas

Testes recomendados com erros (Semko e Pavlov).

Acrescentou sua variante

P.S. Os modelos têm que ser removidos também, é um erro potencial na comparação de duplas

Tornou os dois últimos elementos da matriz iguais a Valor. A Semko não tem erros. Por favor, mostre-nos o erro em que caso. Não é muito sensato expulsar um líder.

Quais são os erros com o dobro que são causados por sua normalização? Portanto, se você trabalha com uma matriz de duplas, você mesmo precisa se preocupar em colocar dados normalizados na matriz.

 
Dmitry Fedoseev:

Tornou os dois últimos elementos da matriz iguais a Valor. A Semko não tem nenhum erro. Mostre-me em que caso ele tem erros. Não é justo expulsar o líder.

Quais são os erros com o dobro que são causados por sua normalização? Portanto, se estivermos trabalhando com uma matriz de duplas, teremos que adicionar os dados normalizados à matriz nós mesmos.

Eu acabei de comentar no código, você provavelmente não notou. Um erro se o último elemento da matriz estiver sob a condição de eliminação, ou seja, for igual a Valor.

Eu não o removi do código :), apenas para evitar que alguém copie o erro. Acho que Nikolay corrigirá seu código e ele mesmo retornará :)

Quanto aos modelos: haverá um erro ao passar o duplo, pois a função é uma comparação incorreta de números reais, ou melhor, simplesmente não se destina a isso, portanto, antes de colocar um modelo, devemos nos certificar de que a função funcionará corretamente com qualquer tipo.

1

 
Stanislav Dray:

Eu comentei no código, você provavelmente não notou isso. O erro é se o último elemento da matriz estiver sob a condição de eliminação, ou seja, igual a Valor

Eu não o removi do código :), apenas para evitar que alguém o copiasse com um erro. Acho que Nikolay corrigirá seu código e ele mesmo retornará :)

E sobre os modelos: haverá um erro ao passar o duplo, pois a função é uma comparação incorreta de números reais, ou melhor, simplesmente não se destina a isso, portanto, antes de colocar um modelo, você deve se certificar de que a função funcionará corretamente com qualquer tipo.


E o que havia para notar? Isto: "matriz corrompida se um ou mais de seus últimos elementos se encontrarem sob uma condição"? Foi o que escrevi acima - não funcionou. Posso ver por sua captura de tela que a questão não é essa. O erro parece ocorrer quando o número de itens é pequeno.

Que tipo de erro ocorreria com o dobro? Por quê? Quaisquer que sejam os dados na matriz funcionarão dessa forma. Se você quiser que ele funcione corretamente, você deve realizar a normalização antes de colocá-lo em uma matriz. Mas não se deve inserir a normalização na própria função. A função vai perfeitamente bem com o modelo e funcionará bem com o dobro, se você o usar corretamente.

O fato de que todos ficaram subitamente preocupados com o problema do duplo é muito bom.

 
Dmitry Fedoseev:

O que havia para notar? Este aqui: "A matriz é corrompida se um ou mais dos últimos elementos se enquadrarem na condição"? Foi o que escrevi acima, que não funcionou. Como você pode ver em sua captura de tela, não é essa a questão. O erro parece ocorrer quando o número de itens é pequeno.

Que tipo de erro ocorreria com o dobro? Por quê? Quaisquer que sejam os dados na matriz funcionarão dessa forma. Se você quiser que ele funcione corretamente, você deve realizar a normalização antes de colocá-lo em uma matriz. Mas não se deve inserir a normalização na própria função. A função vai perfeitamente bem com o modelo e funcionará bem se você usá-lo corretamente.

O fato de todos estarem subitamente preocupados com o problema do duplo é muito bom, mas é preciso ser sábio a respeito disso.

Você e eu temos visões diferentes sobre como a função deve funcionar. Uma função é uma função na África e deve funcionar sem qualquer preparação de dados, tudo deve funcionar internamente.

P.S. Na verdade ninguém está preocupado, eu não estou realmente incomodado. Eu acabei de escrever que os modelos aqui como quinta perna de um cão e um possível erro

 
Stanislav Dray:

Uma função é uma função e deve funcionar sem qualquer preparação de dados, tudo deve funcionar internamente.

Este é o jardim de infância.