Maison  >  Article  >  développement back-end  >  Quelle est l'utilisation des nombres à virgule flottante en php

Quelle est l'utilisation des nombres à virgule flottante en php

藏色散人
藏色散人original
2021-12-01 09:20:402108parcourir

Les nombres à virgule flottante PHP font référence au type à virgule flottante Float, qui peut être défini par une syntaxe telle que "$a = 1.234; $b = 1.2e3; $c = 7E-10; $d = 1_234.567;".

Quelle est l'utilisation des nombres à virgule flottante en php

L'environnement d'exploitation de cet article : système Windows 7, PHP version 7.4, ordinateur DELL G3

Quelle est l'utilisation des nombres à virgule flottante php

php Float Type Float

Floating virgule ? type (également appelé type float) Numéro de point flottant, nombre double précision double ou nombre réel réel) peut être défini avec l'une des syntaxes suivantes :

<?php
$a = 1.234; 
$b = 1.2e3; 
$c = 7E-10;
$d = 1_234.567; // 从 PHP 7.4.0 开始支持
?>

Les nombres à virgule flottante sont représentés sous la forme (les traits de soulignement ne sont pas pris en charge avant PHP 7.4. 0) :

LNUM          [0-9]+(_[0-9]+)*
DNUM          ([0-9]*(_[0-9]+)*[\.]{LNUM}) | ({LNUM}[\.][0-9]*(_[0-9]+)*)
EXPONENT_DNUM (({LNUM} | {DNUM}) [eE][+-]? {LNUM})

La longueur des mots des nombres à virgule flottante dépend de la plate-forme, bien que la valeur maximale soit généralement de 1,8e308 avec une précision de 14 chiffres décimaux (format IEEE 64 bits).

Avertissement

Précision des nombres à virgule flottante

Les nombres à virgule flottante ont une précision limitée. Bien que cela dépende du système, PHP utilise généralement le double format IEEE 754, donc l'erreur relative maximale due à l'arrondi est de 1.11e-16. Les opérations mathématiques non fondamentales peuvent donner lieu à des erreurs plus importantes, et la propagation des erreurs lors de l'exécution d'opérations composées doit être prise en compte.

De plus, les nombres rationnels tels que 0,1 ou 0,7 qui peuvent être représentés avec précision en décimal, quel que soit le nombre de mantisses, ne peuvent pas être représentés avec précision par le binaire utilisé en interne, et ne peuvent donc pas être convertis au format binaire sans perdre un peu un peu de précision. Cela peut conduire à des résultats confus : par exemple, floor((0.1+0.7)*10) renverra généralement 7 au lieu du 8 attendu, car la représentation interne du résultat est en fait quelque chose comme 7.99999999999999991118... .

Ne croyez donc jamais que le résultat du nombre à virgule flottante est précis jusqu'au dernier chiffre, et ne comparez jamais si deux nombres à virgule flottante sont égaux. Si vous avez vraiment besoin d'une plus grande précision, vous devez utiliser des fonctions mathématiques de précision arbitraire ou la fonction gmp.

Convertir en nombre à virgule flottante

À partir de chaînes

If the string is numeric or leading numeric then it will resolve to the corresponding float value, otherwise it is converted to zero (0).

À partir d'autres types

Pour d'autres types de valeurs, la situation est similaire à la conversion de la valeur en int d'abord, puis en float. Voir la section « Conversion en nombre entier » pour plus d'informations.

注意:
As certain types have undefined behavior when converting to int, this is also the case when converting to float.

Comparaison de nombres à virgule flottante

Comme le message d'avertissement ci-dessus le dit, en raison d'expressions internes, comparer deux nombres à virgule flottante pour l'égalité est problématique. Cependant, il existe des moyens détournés pour comparer les valeurs à virgule flottante.

Pour tester l'égalité des nombres à virgule flottante, utilisez une valeur d'erreur minimale qui n'est qu'un tout petit peu plus grande que cette valeur. Cette valeur, également connue sous le nom d'epsilon machine ou plus petit entier unitaire, est la plus petite valeur de différence pouvant être acceptée dans le calcul.

$a et $b sont égaux à cinq décimales de précision.

<?php
$a = 1.23456789;
$b = 1.23456780;
$epsilon = 0.00001;
if(abs($a-$b) < $epsilon) {
    echo "true";
}
?>

NaN

Certaines opérations mathématiques produisent un résultat représenté par la constante NAN. Ce résultat représente une valeur indéfinie ou non représentable en arithmétique à virgule flottante. Toute comparaison vague ou stricte de cette valeur avec toute autre valeur (sauf vrai) donne lieu à faux.

Étant donné que NAN représente une valeur différente, NAN ne doit pas être comparé à d'autres valeurs, y compris elle-même, et doit être vérifié à l'aide de is_nan().

Apprentissage recommandé : "Tutoriel vidéo PHP"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn