Questions des débutants MQL5 MT5 MetaTrader 5 - page 154
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
C'est-à-dire que vous devez convertir 1.33182 en 1.3318 ? Il suffit de couper le 5e chiffre après la virgule ou de l'arrondir au 4e chiffre, par exemple, on obtient 1,3318 ou 1,3319 à partir de 1,33186 ?
Ma question est de savoir s'il y a un bug ou non. Lors de la conversion de double en int dans mon exemple, le résultat est un de moins. Veuillez le vérifier vous-même.
L'alerte devrait donner 13318, mais elle donne 13317. S'il n'est pas arrondi à l'entier, il donnera 13318.0 correctement.Dites-moi s'il y a une différence dans les expressions :
и
Dites-moi s'il y a une différence dans les expressions :
и
Si vous avez le sentiment que quelque chose n'est pas normal, faites-le savoir :
Ma question est de savoir s'il y a un bug ou non. Lors de la conversion de double en int dans mon exemple, le résultat est un de moins. Vérifiez par vous-même.
L'alerte devrait donner 13318, mais donne 13317. Ainsi, s'il n'est pas possible de réduire à l'infini, alors on obtient correctement 13318.0élimine la partie fractionnaire au lieu de l'arrondir (similaire à MathFloor() plutôt qu'à MathRound()), et dans votre cas, le nombre normalisé pourrait bien être égal à 13318 exactement, mais plutôt à 13317,999999999999997.
qui, lors de la sortie sous forme fractionnaire avec un nombre limité de chiffres, provoque l'arrondi au résultat correct (attendu), et lorsque la partie fractionnaire de.... est rejetée. vous verrez par vous-même.
J'espère avoir été clair.
existe-t-il un analogue du partiel de Sharp ? ou comment le faire ?
il n'y a pas d'analogue. vous pouvez intégrer un morceau de définition en utilisant #include <partial_class_code.mqh>.
Certaines personnes imitent même l'héritage multiple de cette façon. // Je ne le fais pas, j'ai pris l'habitude de m'en passer. :)
Si vous soupçonnez que quelque chose ne va pas, faites-le savoir :
Je l'ai déjà fait. Simple curiosité.
Je vois. Pour en revenir à votre question précédente, l'essentiel du disque peut être tiré de cette comparaison :
Il n'y a aucune différence entre ces entrées. En même temps, je vous recommande de mettre entre parenthèses les calculs mathématiques à l'intérieur des if-os :
if (A<=(B1+B2*B3) && C<=(D1-D2*D3))L'alerte ne produit pas d'erreur. Le point est que la normalisation conduit un nombre à une forme binaire, qui est la plus proche de l'analogue décimal demandé, alors qu'elle peut ne pas coïncider avec lui dans une direction plus grande ou plus petite (dans votre cas). Puisque ce qui est exprimé par une fraction décimale finie, peut ne pas toujours être exprimé par une fraction binaire finie . Expression
entraîne l'élimination de la partie fractionnaire plutôt que l'arrondi (c'est-à-dire qu'elle ressemble plus à MathFloor() qu'à MathRound()), et dans votre cas, le nombre normalisé pourrait bien être 13317.999999999999997 plutôt que 13318 exactement.
qui, lors de la sortie sous forme fractionnaire avec un nombre limité de chiffres, provoque l'arrondi au résultat correct (attendu), et lorsque la partie fractionnaire de.... est rejetée. vous verrez par vous-même.
J'espère l'avoir expliqué clairement.
Merci, je vois.
Autre question, comment lutter contre cela si je ne peux pas me passer de la conversion en int ?
Merci, je vois.
Autre question, comment faire face à cette situation si vous ne pouvez pas vous passer du transfert vers l'int ?
et vous ajoutez quelques epsilons.
DBL_EPSILON
Le plus petit nombre pour lequel la condition 1.0+DBL_EPSILON != 1.0 est remplie.