- Types Integer
- Types Réels (double, float)
- Nombre complexe (complex)
- Type String
- Structures, Classes et Interfaces
- Tableau Dynamique d'Objets
- Matrices et vecteurs
- Conformation des types
- Type Void et Constante NULL
- Types des données
- Pointeurs d'Objets
- Références : Modificateur & et Mot-Clé this
Types Réels (double, float)
Les types réels (ou types à virgule flottante) représentent les valeurs ayant une partie fractionnelle. Dans le langage MQL5, il existe deux types de chiffres à virgule flottante. La méthode de représentation des nombres réels dans la mémoire de l'ordinateur est définie par le standard IEEE 754 et est dépendant de la plateforme, du système d'exploitation et du langage de programmation.
Type |
Taille en octets |
Valeur Positive Minimale |
Valeur Maximum |
Analogie en C++ |
---|---|---|---|---|
float |
4 |
1.175494351e-38 |
3.402823466e+38 |
float |
double |
8 |
2.2250738585072014e-308 |
1.7976931348623158e+308 |
double |
Le nom double signifie que la précision de ces nombres est le double de la précision des nombres de type float. Dans la plupart des cas, le type double est le plus pratique. Dans de nombreux cas, la précision limitée des nombres float n'est pas suffisante. La raison de l'utilisation du type float est l'économie de mémoire (c'est important pour les gros tableaux de nombres réels).
Les constantes à virgule flottante consistent en une partie entière, un point (.) et une partie fractionnelle. Les parties entière et fractionnelle sont des suites de chiffres décimaux.
Exemples :
double a=12.111;
|
Il existe une façon scientifique d'écrire des constantes réelles, souvent cette méthode est plus compacte.
Exemple :
double c1=1.12123515e-25;
|
Il faut se souvenir que les nombres réels sont stockés en mémoire avec une précision limitée dans le système binaire, alors que généralement la notation décimale est utilisée. C'est pourquoi de nombreux nombres qui sont représentés précisemment dans le système décimal ne peuvent être écrit qu'avec une fraction infinie dans le système binaire.
Par exemple, les nombres 0.3 et 0.7 sont représentés dans l'ordinateur comme des fractions infinies, tandhis que 0.25 est stocké de façon exacte car il représente la puissance de 2.
A cet égard, il est fortement recommandé de ne pas comparer deux nombres réels pour l'égalité, car les comparer n'est pas la bonne façon.
Exemple :
void OnStart()
|
Si vous devez comparer l'égalité de deux nombres réels, vous pouvez le faire de deux façons différentes. La première est de comparer la différence entre deux nombres avec une petite valeur spécifiant la précision de la comparaison.
Exemple :
bool EqualDoubles(double d1,double d2,double epsilon)
|
Notez que la valeur d'epsilon dans l'exemple ci-dessus ne peut pas être inférieur à la constante prédéfinie DBL_EPSILON. La valeur de cette constante est 2.2204460492503131e-016. La constante correspondant au type float est FLT_EPSILON = 1.192092896e-07. La signification de ces valeurs est la suivante : c'est la plus petite valeur qui satisfait la condition 1.0 + DBL_EPSILON ! = 1.0 (pour les nombres de type float 1.0 + FLT_EPSILON ! = 1.0).
La deuxième façon utilise la comparaison de la différence normalisée de deux nombres réels avec zéro. Il est inutile de comparer la différence des nombres normalisés avec zéro, car toute opération mathématique avec des nombres normalisés donne un résultat non normalisé.
Exemple :
bool CompareDoubles(double number1,double number2)
|
Certaines opérations du coprocesseur mathématique peuvent générer des nombres r&els invalides, qui ne peuvent pas être utilisés dans les opérations mathématiques et dans les comparaisons, car le résultat d'opération avec des nombres réels est indéfini. Par exemple, lors du calcul de l'arc-sinus de 2, le résultat est l'infini négatif.
Exemple :
double abnormal = MathArcsin(2.0);
|
En plus de l'infini négatif, il y a également l'infini positif et NaN (NotANumber, pas un nombre). Pour savoir si un nombre est invalide, vous pouvez appeler la fonction MathIsValidNumber(). Selon le standard IEEE, ils ont une représentation machine spéciale. Par exemple, l'infini positif pour le type double est représenté par 0x7FF0 0000 0000 0000.
Exemples :
struct str1
|
Voir aussi
DoubleToString, NormalizeDouble, Constantes de Type Numérique