Borrar una matriz de elementos definidos - página 13

 
Maxim Kuznetsov:

El optimizador no interviene: hay la mitad de comparaciones...

Revisa cuidadosamente los tactos y comprueba que la coincidencia total de la lógica
ZS. Sin embargo, dudé.
 

Sólo una mini refacción ("Porque no se puede ser tan bello en el 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 микросекунд
Archivos adjuntos:
 
Sergey Dzyublik:

Sólo una mini refacción ("Porque no se puede ser tan bello en el mundo..."):

Justo por encima de lo que pedí - tratar de poner la matriz original como una serie. ArraySetAsSeries(...,true);

Se trata de una cuestión bastante relevante: ver qué métodos no funcionan en absoluto con las series y cuáles son inesperadamente lentos

No importa con el filtrado de matrices, la pregunta sobre las series es más práctica

 
Sergey Dzyublik:

Sólo una mini refacción ("Porque no se puede ser tan bello en el mundo..."):

Gracias, Sergei, por una útil lección de calidad. :)

 

Movido @Maxim Kuznetsov a una categoría separada, diferentes funciones después de todo

Pruebas recomendadas con errores (Semko y Pavlov).

Añadida su variante

P.D. Y las plantillas deben ser eliminadas, también es un error potencial al comparar dobles

Archivos adjuntos:
 
Stanislav Dray:

Movido @Maxim Kuznetsov a una categoría separada, diferentes funciones después de todo

Pruebas recomendadas con errores (Semko y Pavlov).

Añadida su variante

P.D. Las plantillas también tienen que ser eliminadas, es un error potencial en la comparación de dobles

Hace que los dos últimos elementos del array sean iguales a Value. Semko no tiene errores. Por favor, muéstrenos el error en qué caso. No es muy sensato echar a un líder.

¿Cuáles son esos errores con el doble que se producen por su normalización? Por lo tanto, si trabajas con un array de dobles, tienes que preocuparte de introducir tú mismo los datos normalizados en el array.

 
Dmitry Fedoseev:

Hace que los dos últimos elementos del array sean iguales a Value. Semko no tiene ningún error. Muéstrame en qué caso tiene errores. No es justo echar al líder.

¿Cuáles son esos errores con el doble que se producen por su normalización? Si estamos trabajando con un array de dobles, tendremos que añadir los datos normalizados al array nosotros mismos.

Acabo de comentar el código, probablemente no lo hayas notado. Un error si el último elemento del array cae bajo la condición de borrado, es decir, es igual a Valor.

No lo he eliminado del código :), sólo para evitar que alguien copie el error. Creo que Nikolay corregirá su código y volverá él mismo :)

En cuanto a las plantillas: habrá un error al pasar el doble, ya que la función es incorrecta comparando números reales, o mejor dicho, simplemente no está pensada para ello, por lo que antes de poner una plantilla, debemos asegurarnos de que la función funcionará correctamente con cualquier tipo.

1

 
Stanislav Dray:

Lo comenté en el código, probablemente no lo notaste. El error se produce si el último elemento de la matriz cae bajo la condición de borrado, es decir, es igual al Valor

No lo he quitado del código :), sólo para evitar que alguien lo copie con un error. Creo que Nikolay corregirá su código y volverá él mismo :)

Y sobre las plantillas: habrá un error al pasar el doble, ya que la función es incorrecta comparando números reales, o mejor dicho, simplemente no está pensada para esto, así que antes de poner una plantilla, deberías asegurarte de que la función funcionará correctamente con cualquier tipo.


¿Y qué había que notar? Esto: ¿"array corrompido si uno o más de sus últimos elementos caen bajo una condición"? Eso es lo que escribí arriba - no funcionó. Veo por tu captura de pantalla que no es el punto. El error parece producirse cuando el número de elementos es pequeño.

¿Qué tipo de error se produciría con el doble? ¿Por qué? Cualquier dato que esté en el array funcionará así. Si quieres que funcione correctamente, debes realizar la normalización antes de ponerlo en un array. Pero no debe insertar la normalización en la propia función. La función va perfectamente bien con la plantilla y funcionará bien con el doble, si se utiliza correctamente.

El hecho de que todo el mundo se haya preocupado de repente por el problema del doble es muy bueno.

 
Dmitry Fedoseev:

¿Qué había que notar? Este: ¿"El array se corrompe si uno o más de los últimos elementos caen bajo la condición"? Eso es lo que escribí arriba, que no funcionaba. Como puedes ver en tu captura de pantalla, ese no es el punto. El error parece producirse cuando el número de elementos es pequeño.

¿Qué tipo de error se produciría con el doble? ¿Por qué? Cualquier dato que esté en el array funcionará así. Si quieres que funcione correctamente, debes realizar la normalización antes de ponerlo en un array. Pero no debe insertar la normalización en la propia función. La función va perfectamente con la plantilla y funcionará bien si la utilizas correctamente.

El hecho de que todo el mundo se preocupe de repente por el problema del doble está muy bien, pero hay que ser prudente al respecto.

Tú y yo tenemos puntos de vista diferentes sobre cómo debe funcionar la función. Una función es una función en África y debe funcionar sin ninguna preparación de datos, todo debe funcionar internamente.

P.D. En realidad nadie se preocupa, no me molesta. Acabo de escribir que las plantillas aquí como una quinta pata de perro y un posible error

 
Stanislav Dray:

Una función es una función y debería funcionar sin ninguna preparación de datos, todo debería funcionar internamente.

Esto es un jardín de infancia.