Question aux maîtres du MQL4. Encore une fois à propos de Double Comparaison. - page 5
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
Une conclusion étonnante ! Qu'est-ce qui vous fait penser cela avec n'importe quel chiffre, si vous ne "comprenez" même pas du tout ce qu'est un chiffre ?
Une conclusion étonnante ! Qu'est-ce qui vous fait penser cela avec n'importe quel chiffre, si vous ne "comprenez" même pas du tout ce qu'est un chiffre ?
Je dois dire tout de suite que je préfère ne pas participer à de telles explications, car si vous n'avez rien à dire sur le fond, pourquoi parler ?
J'aimerais remercier tous les professionnels pour leurs conseils !
Irtron, j'ai choisi votre variante, elle m'a beaucoup plu. Je l'ai corrigé un peu pour les cas généraux et je l'ai vérifié :
int ComparePrice(double a, double b, double chiffre)
{
a -= b ;
b = chiffre ;
si (a > b)
retour (1) ;
si (a < -b)
retour (-1) ;
retour (0) ;
}
Merci.
double digit14=0.00000000000001;
double chiffre12=0.000000000001 ;
double chiffre8=0.00000001 ;
double chiffre4=0.0001 ;
double chiffre2=0,01 ;
qui déterminera la précision requise.
Pour cette fonctionnalité, il fonctionne très rapidement.
Irtron, merci encore.
Une conclusion étonnante ! Qu'est-ce qui vous fait penser cela avec n'importe quel chiffre, si vous ne "comprenez" même pas ce qu'est un chiffre ?
Je dois dire tout de suite que je préfère ne pas participer à de telles explications, car si vous n'avez rien à dire sur le fond, pourquoi parler ?
Pourquoi chipoter, je viens de lire ce que vous avez écrit. Votre compréhension est manifestement entravée par "votre flagrante... (vous nommez le mot)"
VBAG, pourquoi réinventer la roue alors qu'il existe une fonction NormalizeDouble() qui compare deux nombres plus rapidement que ComparePrice() ?
VBAG, pourquoi réinventer la roue alors qu'il existe une fonction NormalizeDouble() qui compare deux nombres plus rapidement que ComparePrice() ?
Si vous pouvez suggérer une moto similaire ou de meilleures solutions alternatives, je serai heureux de les utiliser.
Respectueusement,
Vladimir
VBAG, pourquoi réinventer la roue alors qu'il existe une fonction NormalizeDouble() qui compare deux nombres plus rapidement que ComparePrice() ?
Si vous pouvez me suggérer une roue similaire ou de meilleures alternatives, je serai heureux de les utiliser.
Respectueusement,
Vladimir
2007.09.12 07:15:09 $CheckCompareDouble USDJPY,M5 : CD : 20485, xNormalize : 51265
Conclusion :
La fonction CD compare deux nombres doubles, donne la réponse <, > ou = avec 14 décimales et fonctionne 2 fois plus vite que la simple exécution de NormalizeDouble() (même sans logique pour les comparer).
Beaucoup de gens écrivent que pour la comparaison il faut utiliser la fonction intégrée NormalizeDouble(). (c'est aussi ce que les développeurs recommandent).
Par conséquent, je voudrais d'abord définir : "Qu'est-ce que NormalizeDouble() ?", c'est-à-dire comment il fonctionne, quel est son algorithme.
Arrondir un nombre à virgule flottante à une précision spécifiée.
...
Je ne sais pas comment l'arrondi est organisé dans MQL4 (demandez aux développeurs), mais je connais une méthode standard Arrondir les nombres à virgule flottante à la précision spécifiée :
Ici, une fonction :
Cette fonction montre que l'on passe d'abord d'un nombre réel à un nombre entier, puis que l'on revient à un nombre réel.
Pour la comparaison, il suffit de passer à un nombre entier.
Par conséquent, je pense que le moyen le plus rapide et le plus fiable de comparer des nombres réels est de les convertir en nombres entiers.
Voici à quoi ressemblera la comparaison :
Tout cela peut être mis en forme dans une fonction et utilisé. C'est une douleur d'écrire, il semble être clair comment faire une fonction !
Je pense que cette méthode est plus rapide que d'appeler NormalizeDouble().
Par sécurité, vous pouvez également faire en sorte que la fonction MathRound() renvoie un nombre entier, puisque par défaut elle renvoie un double.
La façon la plus simple de procéder est la suivante
Alors seuls les entiers seront comparés, et ils se comparent bien !
Je pense que cette façon est la plus correcte, n'est-ce pas ?
Je pense donc que le moyen le plus rapide et le plus fiable est de convertir les nombres réels en nombres entiers.
La comparaison ressemblerait à ceci :
Je pense que c'est la bonne façon de faire, n'est-ce pas ?
Toute la beauté du code d'Irtron réside dans sa compacité (absolument rien de supplémentaire - même les variables sont sauvegardées !)
Et vous suggérez que nous devrions ajouter deux opérations supplémentaires pour chaque opération au moins.
C'est un avantage en termes de vitesse !
Je ne pense pas. Jugez par vous-même