Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Methode für den Rest von Gleitkommazahlen

PHP-Methode für den Rest von Gleitkommazahlen

怪我咯
怪我咯Original
2017-07-11 14:05:174289Durchsuche

Gleitkommatyp (auch Float, Double oder Real genannt. Die Wortlänge von Gleitkommazahlen ist plattformabhängig, obwohl der Maximalwert normalerweise 1,8e308 beträgt und eine Genauigkeit von 14 Dezimalstellen hat (64-Bit-IEEE-Format) .

Gleitkommazahlen haben eine begrenzte Genauigkeit, obwohl PHP je nach System normalerweise das IEEE 754-Format mit doppelter Genauigkeit verwendet. Der maximale relative Fehler aufgrund der Rundung beträgt 1,11e-16 Bei der Durchführung zusammengesetzter Operationen muss die Fehlerausbreitung berücksichtigt werden.

Außerdem können rationale Zahlen wie 0,1 oder 0,7, die genau in Dezimalzahlen ausgedrückt werden können, intern nicht in Binärform verwendet werden, egal wie viele Mantissen es gibt. Exakte Darstellung und daher nicht in ein Binärformat konvertierbar, ohne etwas an Präzision zu verlieren

Dies würde zu verwirrenden Ergebnissen führen:

Zum Beispiel floor((0.1+0.7)*10)  Normalerweise gibt 7 anstelle der erwarteten 8 zurück, da die interne Darstellung des Ergebnisses tatsächlich etwa so lautet: 7.9999999999999991118...

Vertrauen Sie also niemals darauf, dass ein Gleitkomma-Ergebnis bis auf die letzte Ziffer genau ist, und vergleichen Sie niemals zwei. Sind Gleitkommazahlen gleich? ​​

Dieser Artikel beschreibt die Methode zur Berechnung des Rests von Gleitkommazahlen in PHP.

Ich teile ihn als Referenz mit Ihnen.

Im Allgemeinen denken wir bei der Durchführung einer Restoperation daran, das Prozentzeichen % zu verwenden. Wenn der Divisor jedoch einen großen Wert hat und den Bereich von int überschreitet, ist der Rest ungenau

php ist groß. Restfunktion (Gleitkommazahl):

/**
 * php大数取余
 *
 * @param int or float $bn 除数
 * @param int $sn 被除数
 * @return int 余数
 */
//大数(浮点数)取余方法
function Kmod($bn, $sn) {
  return intval(fmod(floatval($bn), $sn));
}
Testcode:

//大数(浮点数)取余方法
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));
Ausführungsergebnis:

Das obige ist der detaillierte Inhalt vonPHP-Methode für den Rest von Gleitkommazahlen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn