PHP の精度設定を変更すると、2 桁の 10 進数の正確な計算が保証されますか?

DDD
リリース: 2024-11-09 15:47:03
オリジナル
189 人が閲覧しました

Can modifying PHP's precision setting guarantee accurate 2-digit decimal calculations?

浮動小数点の問題の精度の回避策

浮動小数点の計算では、バイナリ表現の制限により不一致が発生する可能性があります。考えられる解決策の 1 つは php.ini の精度設定を変更することですが、その信頼性を評価することが重要です。

2 桁 10 進精度の適合性

いいえ、精度設定の変更だけでは保証できません。正確な 2 桁の計算、特に 10^6 を超える数量を扱う場合。

例失敗

このアプローチの欠点を示すために、次の例を考えてみましょう。

$a = 5.88;
$q = 2.49;
$b = $a * 0.01;
echo ($a * $q) - $b;
ログイン後にコピー

出力:

14.5824
ログイン後にコピー

精度が 8 であっても、結果は次のようになります。中間計算のため、正確な 2 桁の値ではありません。

代替アプローチ

精度の回避策に依存する代わりに、代替ソリューションを検討してください。

  • 正確な 10 進数の計算には bcmath を使用します。
  • 一貫した 2 桁の丸めには、number_format を使用します。
  • 整数を扱うには値を 100 で乗算し、で除算します。最終結果は 100 で、精度を確保します。

更新

質問 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート