2

PHP で float 比較を行うときに必要なデルタを確立しようとしています。変数を詳しく見て違いを確認したいと思います。

$a、$b という 2 つの計算変数があります。

$a = some_function();

$b = some_other_function();

PHP が使用する正確な数を確認するにはどうすればよいですか?

私はデルタを指定する必要があるこの数式でそれらを比較したい:

$delta = 0.00001;
if (abs($a-$b) < $delta) {
  echo "identical";
}

var_dump($a, $b) は 1.6215 を返します。1.6215. しかし、私はそれらが完全に等しいわけではないことを知っています。

var_dump($a === $b);

false と評価されます。

var_dump()内部値を出力しないのはなぜですか?

4

2 に答える 2

10

PHP では、浮動小数点数の出力値は PHP 構成の「精度」に依存します。

次の方法で変更できます。

ini_set('precision', YOUR_DESIRED_PRECISION_AS_INTEGER);

たとえば、次のようにします。

ini_set('precision', 18);

数値は次のように表示される場合があります。

float 1.62149999999999994

フロート 1.6214999999999995

だから今、それらの違いはより明確です。

したがって、デルタは次のようになります。 $delta = 0.00000000000001; それは本当にあなたが探している精度に依存します。

正確な数学的計算を行う必要がある場合は、BC 数学関数を参照してください。


参考文献・出典

PHP - 浮動小数点数

PHP - 浮動小数点数 - ユーザー投稿ノート - deminy at deminy dot net

コードパッド

于 2012-12-10T11:54:10.337 に答える
0

構成ファイルを編集したくない場合は... と で を使用できround(val, precision)ます。そうすれば、結果を必要な精度で返すことができます。小切手:some_function()some_other_function()
http://php.net/manual/en/function.round.php

于 2012-12-10T12:17:38.587 に答える