浮動小数点の計算では、バイナリ表現の制限により不一致が発生する可能性があります。考えられる解決策の 1 つは php.ini の精度設定を変更することですが、その信頼性を評価することが重要です。
いいえ、精度設定の変更だけでは保証できません。正確な 2 桁の計算、特に 10^6 を超える数量を扱う場合。
このアプローチの欠点を示すために、次の例を考えてみましょう。
$a = 5.88; $q = 2.49; $b = $a * 0.01; echo ($a * $q) - $b;
出力:
14.5824
精度が 8 であっても、結果は次のようになります。中間計算のため、正確な 2 桁の値ではありません。
精度の回避策に依存する代わりに、代替ソリューションを検討してください。
質問 1: 精度 = 8 の失敗範囲
テストするのは非現実的です0 ~ 999999.99 の数値のすべての組み合わせ。ただし、簡単なテストでは、精度が 8 であっても不正確さが発生する可能性があることが実証されています。
$a = 0.19; $b = 0.16; $i = 0; for ($c = 0.01; $c <= 0.07; $c += 0.01) { $i = $i + $c; } echo $i - ($a + $b);
出力:
0.000055879354492188
この誤差は、処理中の丸め誤差の蓄積が原因です。浮動小数点数の加算。
質問 2: 失敗の数学的推定しきい値
障害しきい値の推定には、複雑な数学的分析が必要です。このトピックに関する包括的な議論は、この記事の範囲を超えています。
ただし、浮動小数点計算には、数値のバイナリ表現による固有の精度制限があることを覚えておくことが重要です。したがって、正確な回避策のみに依存することは、確実な解決策ではありません。
以上がPHP の精度設定を変更すると、2 桁の 10 進数の正確な計算が保証されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。