Erreurs, bugs, questions - page 2360

 
Vladimir Pastushak:

Tout se compile, supprimez la ligne Error

limitation de la longueur des lignes dans l'éditeur

 
Fast528:

Limiter la longueur d'une ligne dans l'éditeur

Une chaîne de caractères n'est pas affichée lorsqu'elle dépasse 4095 caractères.

 
fxsaber:

Expliquez à un idiot pourquoi cela se produit ici.

Supposons que nous ne puissions opérer que sur des nombres impairs, et que si le résultat d'une opération arithmétique devient pair, on suppose qu'il s'agit du nombre impair le plus proche à partir du haut, alors

(43 -  5) - 7  = (38)39 - 7  = (32)33
 43 - (5  + 7) = 43 - (12)13 = (30)31 

33 != 31

 
fxsaber:
J'ai passé plusieurs heures à chercher des divergences. J'ai trouvé ceci


Les particularités sont doubles, mais pas telles que si l'on change l'ordre d'addition (sauf pour les nombres relativement très différents), le résultat est différent ! Expliquez à un idiot pourquoi cela se produit ici ?

Il suffit de regarder les deux dernières lignes de la source.

Comme vous vous plaisez à le dire vous-même, l'agolymètre qui est établi pour la précision de l'arrondissement du double au même nombre à la limite de la précision spécifiée est "tordu". La raison, évidemment, est que la même valeur obtenue par différentes méthodes (permutation des multiplicateurs, ouverture des parenthèses, etc.) en représentation double peut s'avérer être des nombres différents, proches au maximum de la valeur souhaitée de différents côtés. Arrondissez au chiffre suivant, et ensuite vous décidez comment traiter le dernier...

 
fxsaber:

Lorsque vous faites size+point, vous débordez la mantisse, puis vous arrondissez/rejetez (selon le mode du fpu).

   float avg = 0.7;
   float size = 0.3;
   float point = 0.4;

   float r1 = avg - size - point;
   float r2 = avg - (size + point);
   cout << "r1 == r2 ? " << (r1 == r2) << '\n';

   cout << "-----avg-----\n";  prfl(avg);
   cout << "-----size-----\n"; prfl(size);
   cout << "-----point-----\n"; prfl(point);
   cout << "-----avg - size------\n"; prfl(avg - size);
   cout << "-----(avg - size) - point------\n"; prfl((avg - size) - point);
   cout << "-----size + point------\n"; prfl(size + point);
   cout << "-----avg - (size + point)------\n"; prfl(avg - (size + point));
r1 == r2 ? 0
-----avg-----
implicit_1 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
exponenta = -1
sign = 0
-----size-----
implicit_1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 0
exponenta = -2
sign = 0
-----point-----
implicit_1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1
exponenta = -2
sign = 0
-----avg - size------
implicit_1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0
exponenta = -2
sign = 0
-----(avg - size) - point------
implicit_1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
exponenta = -25
sign = 1
-----size + point------
implicit_1 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 0 0
exponenta = -1
sign = 0
-----avg - (size + point)------
implicit_1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
exponenta = -24
sign = 1

En général, le résultat de deux doublets ne sera le même que s'ils sont obtenus de la même manière (sauf si l'on compte les cas où l'on a affaire à des entiers).

 
A100:
Ilya Malev:
pavlick_:

Merci pour les réponses, chacune d'entre elles était précieuse. Pour la première fois, j'ai constaté que le fait d'ajouter les mêmes éléments au PRIX, mais dans un ordre différent, crée des PRIX différents. D'où des résultats différents dans le Testeur.

Lors de la discussion sur les doublages, il était clair quand et pourquoi ils pouvaient être comparés les uns aux autres. Mais c'est la première fois que le résultat du CT est aussi clairement affecté par le prix des points positifs et les résultats différents.


Il s'avère que pour éviter ces ambiguïtés, nous devons ajouter un artimon de moins d'un demi-point au prix calculé, puis normaliser.

 
fxsaber:

Il s'avère que pour éviter ces ambiguïtés, nous devons ajouter au prix calculé une simple fraction inférieure à un demi-point, puis normaliser.

Et il y a aussi une opinion selon laquelle si les résultats du CT changent beaucoup à partir de choses aussi insignifiantes, vous devriez dire "merci" et jeter ce CT à la poubelle.

 
fxsaber:

Merci pour les réponses, chacune d'entre elles était précieuse. J'ai remarqué pour la première fois que le fait d'ajouter les mêmes éléments à un PRIX, mais dans un ordre différent, crée des PRIX différents. D'où des résultats différents dans le Testeur.

Lors de la discussion sur les doublages, il était clair quand et pourquoi ils pouvaient être comparés les uns aux autres. Mais c'est la première fois que le résultat du CT est aussi clairement affecté par le prix des points positifs et les résultats différents.


Il s'avère que pour éviter ces ambiguïtés, nous devons ajouter un artimon de moins d'un demi-point au prix calculé, puis normaliser.

Peut-être cela vaut-il la peine de cartographier les caractéristiques ?

Особенности языка mql5, тонкости и приёмы работы
Особенности языка mql5, тонкости и приёмы работы
  • 2017.02.24
  • www.mql5.com
В данной теме будут обсуждаться недокументированные приёмы работы с языком mql5, примеры решения тех, или иных задач...
 
Ilya Malev:

Et il y a aussi l'opinion selon laquelle si les résultats d'un CT changent beaucoup à partir de si petites choses, vous devriez dire "merci" et jeter ce CT à la poubelle.

Ils ne changent pas beaucoup, ils changent tout simplement. C'est suffisant pour commencer une enquête.

 
Artyom Trishkin:

Peut-être devrait-elle être affichée dans les caractéristiques ?

Je vais essayer de le concevoir.