Maison >développement back-end >tutoriel php >Méthode de reste de nombre à virgule flottante PHP
Type à virgule flottante (également appelé float, double ou real. 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 et ait une précision de 14 chiffres décimaux (format IEEE 64 bits) .
Les nombres à virgule flottante ont une précision limitée, bien que selon le système, PHP utilise généralement le format double précision IEEE 754, l'erreur relative maximale due à l'arrondi est de 1.11e-16. Donne une erreur plus grande, et le. 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 exprimés avec précision en décimal ne peuvent pas être utilisés en interne en binaire, quel que soit le nombre de mantisses. Représentation exacte, et ne peut donc pas être convertie au format binaire sans perdre un peu de précision
Cela donnerait des résultats déroutants :
Par exemple, floor((0.1+0.7)*10)
Renvoie généralement 7 au lieu du 8 attendu car la représentation interne du résultat est en fait quelque chose comme 7.9999999999999991118...
Cet article décrit la méthode de prise du reste des nombres à virgule flottante en PHP
Je le partage avec vous pour votre référence. 🎜>Généralement, la première chose à laquelle nous pensons lorsque nous effectuons une opération de reste est d'utiliser le signe pourcentage %, mais lorsque le diviseur est une grande valeur et dépasse la plage de int, le reste est inexact
<.>php est grand. Fonction de reste numérique (nombre à virgule flottante) :Code de test :
/** * php大数取余 * * @param int or float $bn 除数 * @param int $sn 被除数 * @return int 余数 */ //大数(浮点数)取余方法 function Kmod($bn, $sn) { return intval(fmod(floatval($bn), $sn)); }
Résultat de l'exécution :
//大数(浮点数)取余方法 function Kmod($bn, $sn) { return intval(fmod(floatval($bn), $sn)); } //整数取余方法 function mod($bn, $sn) { return $bn%$sn; } //最大的int整数 $bn = PHP_INT_MAX; $sn = 11; var_dump($bn); var_dump(Kmod($bn, $sn)); var_dump(mod($bn, $sn)); //给最大的int整数加1 $bn = PHP_INT_MAX + 1; var_dump($bn); var_dump(Kmod($bn, $sn)); var_dump(mod($bn, $sn));
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!