Effacement d'un tableau d'élément(s) défini(s) - page 13

 
Maxim Kuznetsov:

L'Optimizer n'est pas impliqué - il y a moitié moins de comparaisons...

Passez soigneusement en revue les tacts et voyez que la pleine coïncidence de la logique
ZS. J'ai hésité, cependant.
 

Juste un mini refactoring ("Parce qu'on ne peut pas être si beau dans le monde...") :

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

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

Résultat :
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 микросекунд
Dossiers :
 
Sergey Dzyublik:

Juste un mini refactoring ("Parce qu'on ne peut pas être si beau dans le monde...") :

Juste au-dessus de ma question - essayez de mettre le tableau original comme une série. ArraySetAsSeries(...,true) ;

C'est une question tout à fait pertinente - pour voir quelles méthodes ne fonctionnent pas du tout avec les séries, et lesquelles sont étonnamment lentes.

Peu importe le filtrage des tableaux, la question sur les séries est plus pratique.

 
Sergey Dzyublik:

Juste un mini refactoring ("Parce qu'on ne peut pas être si beau dans le monde...") :

Merci, Sergei, pour cette utile leçon de qualité. :)

 

Déplacement de @Maxim Kuznetsov vers une catégorie distincte, des fonctions différentes après tout.

Tests recommandés avec erreurs (Semko et Pavlov).

Ajout de votre variante

P.S. Et les modèles doivent être supprimés, c'est aussi une erreur potentielle lors de la comparaison des doubles.

Dossiers :
 
Stanislav Dray:

Déplacement de @Maxim Kuznetsov vers une catégorie distincte, des fonctions différentes après tout.

Tests recommandés avec erreurs (Semko et Pavlov).

Ajout de votre variante

P.S. Les modèles doivent être supprimés aussi, c'est une erreur potentielle dans la comparaison des doubles.

Rend les deux derniers éléments du tableau égaux à la valeur. Semko n'a pas d'erreurs. Veuillez nous montrer l'erreur dans quel cas. Il n'est pas très judicieux de jeter un leader.

Quelles sont ces erreurs avec les doubles qui sont causées par leur normalisation ? Ainsi, si vous travaillez avec un tableau de doubles, vous devez vous soucier de placer vous-même les données normalisées dans le tableau.

 
Dmitry Fedoseev:

Rend les deux derniers éléments du tableau égaux à Value. Semko n'a pas d'erreur. Montrez-moi dans quel cas il a commis des erreurs. Il n'est pas juste de jeter le leader.

Quelles sont ces erreurs avec les doubles qui sont causées par leur normalisation ? Si nous travaillons avec un tableau de doubles, nous devrons ajouter nous-mêmes les données normalisées dans le tableau.

J'ai juste commenté le code, tu ne l'as probablement pas remarqué. Une erreur si le dernier élément du tableau est soumis à la condition de suppression, c'est-à-dire s'il est égal à Value.

Je ne l'ai pas supprimé du code :), juste pour éviter que quelqu'un ne copie l'erreur. Je pense que Nikolay va corriger son code et qu'il reviendra lui-même :)

En ce qui concerne les modèles : il y aura une erreur lors du passage du double, car la fonction est incorrecte comparaison des nombres réels, ou plutôt, il n'est tout simplement pas conçu pour cela, donc avant de mettre un modèle, nous devons nous assurer que la fonction fonctionnera correctement avec tous les types.

1

 
Stanislav Dray:

J'ai commenté le code, tu ne l'as probablement pas remarqué. L'erreur se produit si le dernier élément du tableau tombe sous la condition de suppression, c'est-à-dire s'il est égal à la Valeur

Je ne l'ai pas supprimé du code :), juste pour éviter que quelqu'un le copie avec une erreur. Je pense que Nikolay va corriger son code et qu'il reviendra lui-même :)

Et à propos des modèles : il y aura une erreur lors du passage du double, car la fonction est incorrecte comparaison des nombres réels, ou plutôt elle n'est tout simplement pas prévue pour cela, donc avant de mettre un modèle, vous devez vous assurer que la fonction fonctionnera correctement avec tous les types.


Et qu'y avait-il à remarquer ? Ceci : "tableau corrompu si un ou plusieurs de ses derniers éléments tombent sous une condition" ? C'est ce que j'ai écrit plus haut - ça n'a pas marché. Je vois d'après votre capture d'écran que ce n'est pas le but. L'erreur semble se produire lorsque le nombre d'éléments est faible.

Quel type d'erreur se produirait avec le double ? Pourquoi ? Les données contenues dans le tableau fonctionneront de cette façon. Si vous voulez qu'il fonctionne correctement, vous devez effectuer une normalisation avant de le mettre dans un tableau. Mais vous ne devez pas insérer la normalisation dans la fonction elle-même. La fonction s'accorde parfaitement avec le modèle et fonctionnera bien avec le double, si vous l'utilisez correctement.

Le fait que tout le monde se soit soudainement préoccupé du problème du double est une très bonne chose.

 
Dmitry Fedoseev:

Qu'y avait-il à remarquer ? Celui-là : "Le tableau est corrompu si un ou plusieurs des derniers éléments tombent sous la condition" ? C'est ce que j'ai écrit plus haut, que ça n'a pas marché. Comme vous pouvez le voir sur votre capture d'écran, ce n'est pas le problème. L'erreur semble se produire lorsque le nombre d'éléments est faible.

Quel type d'erreur se produirait avec le double ? Pourquoi ? Quelles que soient les données contenues dans le tableau, elles fonctionneront de cette manière. Si vous voulez qu'il fonctionne correctement, vous devez effectuer une normalisation avant de le mettre dans un tableau. Mais vous ne devez pas insérer la normalisation dans la fonction elle-même. Cette fonction s'accorde parfaitement avec le modèle et fonctionnera parfaitement si vous l'utilisez correctement.

Le fait que tout le monde se préoccupe soudainement du problème des doubles est une très bonne chose, mais il faut faire preuve de sagesse.

Vous et moi avons des points de vue différents sur la façon dont la fonction doit fonctionner. Une fonction est une fonction en Afrique et elle doit fonctionner sans aucune préparation des données, tout doit fonctionner en interne.

P.S. En fait, personne n'est concerné, ça ne me dérange pas vraiment. Je viens d'écrire que les modèles ici comme la cinquième patte d'un chien et une erreur possible.

 
Stanislav Dray:

Une fonction est une fonction et doit fonctionner sans aucune préparation des données, tout doit fonctionner en interne.

C'est un jardin d'enfants.

Raison: