Maison  >  Article  >  développement back-end  >  Méthode de reste de nombre à virgule flottante PHP

Méthode de reste de nombre à virgule flottante PHP

怪我咯
怪我咯original
2017-07-11 14:05:174283parcourir

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...

Donc, ne croyez jamais qu'un résultat à virgule flottante est précis jusqu'au dernier chiffre, et ne comparez jamais deux nombres à virgule flottante. ​

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!

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