ホームページ  >  記事  >  バックエンド開発  >  PHP 浮動小数点数の正確な操作について簡単に説明します。PHP 浮動小数点数_PHP チュートリアル

PHP 浮動小数点数の正確な操作について簡単に説明します。PHP 浮動小数点数_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-12 08:57:27883ブラウズ

PHP 浮動小数点数の正確な計算について簡単に説明しましょう

bc は Binary Calculator の略です。 bc* 関数のパラメーターは、すべてのオペランドにオプションの [intscale] を加えたものです (たとえば、string bcadd(string $left_operand, string $right_operand[, int $scale]) )。scale が指定されていない場合は、デフォルトの bcscale が使用されます。 。 価値。ここで、大きな数値は 0 ~ 9 の文字列で直接表現され、計算結果も文字列になります。

bcadd — 2 つの高精度数値を加算します
bccomp — 2 つの高精度数値を比較し、-1、0、1 を返します
bcdiv — 2 つの高精度数値を除算します
bcmod — 高精度の数値の余りを求める
bcmul — 2 つの高精度数値を乗算します
bcpow — 高精度の数値のべき乗を求める
bcpowmod — 数論で非常に一般的に使用される、高精度の数値べき乗と係数を求めます
bcscale — デフォルトの小数点以下の桁数を設定します。これは Linux bc の "scale=" に相当します
bcsqrt — 高精度の数値の平方根を求めます
bcsub — 2 つの高精度数値を減算します

まずコードを見てみましょう:

リーリー

出力される値は実際にはブール値 false です

これはなぜですか? PHP マニュアルには、浮動小数点数に関する次の警告メッセージがあります。

警告

浮動小数点精度
0.1 や 0.7 のような単純な小数は、精度を少し損なうことなく内部バイナリ形式に変換できないようです。これは、混乱を招く結果につながる可能性があります。たとえば、floor((0.1+0.7)*10) は、結果の内部表現が 7.9999999999... のようなものであるため、通常、期待される 8 ではなく 7 を返します。
これは、有限の桁数で特定の小数を正確に表現することが不可能であるという事実と関係しています。たとえば、10 進数の 1/3 は 0.3333333 になります。
したがって、浮動小数点数の結果が最後の桁まで正確であると決して信じないでください。また、2 つの浮動小数点数が等しいかどうかを比較しないでください。本当により高い精度が必要な場合は、任意精度の数学関数または gmp 関数を使用する必要があります

次に、上記の方程式を次のように書き直す必要があります

リーリー

これで浮動小数点数の計算問題が解けます

興味があるかもしれない記事:

    PHP データ型の整数型と浮動小数点数の紹介
  • 浮動小数点数形式を制御するための PHP の sprintf 関数の使用
  • 浮動小数点の不正確な計算、比較、丸めの解決策PHP の数値
  • 2 つの浮動小数点数が等しいかどうかを判断するための PHP メソッド
  • PHP 浮動小数点数の精度の問題の概要
  • PHP 浮動小数点数の知識を知っておく必要があります
  • での 2 つの float (浮動小数点) 比較例の分析PHP
  • PHP 浮動小数点数の FAQ の 1 つ

http://www.bkjia.com/PHPjc/1108613.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/1108613.html技術記事 PHP 浮動小数点数の正確な計算について簡単に説明します。PHP 浮動小数点数 bc は Binary Calculator の略です。 bc* 関数のパラメータは、すべてのオペランドにオプションの [int スケール] を加えたものです (文字列 bcadd(string...
)
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。