Double vs FLOAT - erreur MathFloor peu claire - page 4

 
Andrey Dik:
Le flottement est la castration des chiffres et n'offre aucun avantage. Mieux vaut faire face à toutes les pertes de conversions et utiliser la plus grande précision possible - le double.
Merci. Je vais essayer de trouver où j'ai fait une erreur. Pour l'instant, le flotteur fonctionne toujours aussi bien. Je n'ai pas l'habitude d'abandonner ce que j'ai commencé. Mais cette erreur m'a déstabilisé.
 
Vladislav Andruschenko:
Merci. Je vais essayer de trouver où était mon erreur. En attendant, le flotteur fonctionne. Je n'ai pas l'habitude d'abandonner. Mais cette erreur m'a fait perdre la tête.
C'est vous qui décidez, mais notez que TOUTES les fonctions mathématiques standard fonctionnent avec des nombres doubles et produisent des résultats doubles. L'application de ces fonctions à des nombres flottants produit une conversion interne en double, de sorte que vous perdrez de toute façon la précision et la validité des résultats.

Personnellement, je n'utilise jamais dans les calculs et les comparaisons de nombres la méthode consistant à comparer la différence avec une valeur minimale acceptée, je travaille toujours avec la plus grande précision possible jusqu'au 16ème signe, et ce n'est que dans la dernière opération que je fais la normalisation. Si vous manipulez le double correctement, il n'y a aucun problème, ce que je vous conseille de faire, sinon vous rencontrerez des problèmes de distorsion des résultats associés à une perte de précision dans l'une des étapes des calculs / conversions.
 
Andrey Dik:
C'est vous qui voyez, mais notez que TOUTES les fonctions mathématiques standard fonctionnent avec des nombres doubles et donnent des résultats doubles. L'application de ces fonctions à des nombres flottants est toujours une conversion interne en double, donc dans tous les cas, vous perdrez en précision et en validité des résultats obtenus.

Personnellement, je n'utilise jamais dans les calculs et les comparaisons de nombres la méthode consistant à comparer la différence avec une valeur minimale acceptée, je travaille toujours avec la plus grande précision possible jusqu'au 16ème signe, et ce n'est que dans la dernière opération que je fais la normalisation. Si vous travaillez avec le double correctement aucun problème, ce que je vous conseille de faire, sinon vous rencontrerez des problèmes de distorsion des résultats associés à une perte de précision dans une des étapes des calculs / conversions.
Merci pour votre réponse complète.
 

le prix de l'évaluation en 2017 est indiscutablement correct

ce ne sont pas les mites, c'est le fumier...

 
Mikhail Dovbakh:

le prix de l'évaluation en 2017 est indiscutablement correct

Dites-nous.
 

c'est comme ça que ça devrait être

double Averab=(Ask+Bid)/2/_Point;
double AUTOPRICE=MathFloor( NormalizeDouble(Averab,2) )*_Point;
 
Taras Slobodyanik:

ça devrait être comme ça.

double Averab=MathAbs(Ask-Bid)/2/_Point;
double AUTOPRICE=MathFloor( NormalizeDouble(Averab,2) )*_Point;


Vous avez changé votre code plusieurs fois.

J'ai fait la même chose. J'ai expérimenté, j'ai compris ce que sont double et int, mais quand j'ai calculé explicitement, ce n'était pas ce dont j'avais besoin.

La première ligne est celle que vous avez suggérée.

MathFloor( NormalizeDouble((Ask+Bid)/Point,_Digits) )*Point
2017.02.26 18:24:59.133 2017.01.02 00:03:00  Exp - DOUBLE TEST MATHFLOOR EURUSD,M30: MathFloor=2.10287
2017.02.26 18:24:59.133 2017.01.02 00:03:00  Exp - DOUBLE TEST MATHFLOOR EURUSD,M30: DOUBLE    askP2=105146 bidP2=105141 Averab2=105143.5000000000 AUTOPRICE=1.0514300000
2017.02.26 18:24:59.133 2017.01.02 00:03:00  Exp - DOUBLE TEST MATHFLOOR EURUSD,M30: FLOAT    askP=105146 bidP=105141 Averab=105143.5000000000 AUTOPRICE=1.0514299870
 

donc c'est bien105143.5000000000 arrondi à la baisse 43 est...

(46-41)/2 = 2,5, arrondi au chiffre inférieur = 2

 
Taras Slobodyanik:

donc c'est bien105143.5000000000 arrondi à la baisse 43 est...

(46-41)/2 = 2,5, arrondi au chiffre inférieur = 2


c'est vrai,

mais avec des écarts différents (2,3,4,5,6,7), l'arrondi vers le bas est différent et parfois pas tout à fait exact.

 
Vérifié de 0 à 8 tout est OK...