ホームページ  >  記事  >  バックエンド開発  >  PHP浮動小数点数剰余メソッド

PHP浮動小数点数剰余メソッド

怪我咯
怪我咯オリジナル
2017-07-11 14:05:174289ブラウズ

浮動小数点型 (float、double、または real とも呼ばれます。浮動小数点数の語長はプラットフォームに依存しますが、通常、最大値は 1.8e308 で、精度は 10 進数 14 桁 (64 ビット IEEE 形式) です。

浮動小数点数の精度は限られていますが、システムによって異なりますが、PHP は通常 IEEE 754 倍精度形式を使用し、丸めによる最大相対誤差は 1.11e-16 であり、実行時に誤差の伝播を考慮する必要があります。

さらに、0.1 や 0.7 などの 10 進数で正確に表現できる有理数は、仮数がいくらあっても、内部で使用される 2 進数では正確に表現できないため、仮数なしでは表現できません。精度を持たずにバイナリ形式に変換すると、次のようになります。

たとえば、

したがって、浮動小数点の結果が最後の桁まで正確であると決して信じないでください。また、2 つの浮動小数点数を比較しないでください。点は等しいですか?

floor((0.1+0.7)*10) 通常会返回 7 而不是预期中的 8,因为该结果内部的表示其实是类似 7.9999999999999991118...

この記事の例では、PHP で浮動小数点数の余りを取得する方法について説明します

参考までに、詳細は次のとおりです。 、剰余演算を行うときに最初に考えるのはパーセント記号 % を使用することですが、除数が大きな値で int の範囲を超える場合、剰余は不正確になります。 ) 剰余関数:

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

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

実行結果:

int 2147483647
int 1
int 1
float 2147483648
int 2
int -2

以上がPHP浮動小数点数剰余メソッドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。