倍精度: 精度の謎が明らかに
倍精度データは小数点以下約 15 桁の精度を保持するという概念にもかかわらず、処理時に異常が発生します1.0/7.0 のような繰り返しの小数を使用します。驚くべきことに、そのような値が割り当てられた変数は、内部的に 17 桁の表現を格納します。この違いにより、基礎となるメカニズムを調査する必要があります。
IEEE 倍精度値は、53 の有効ビット (DBL_MANT_DIG) で構成されます。これは、10 進数でほぼ 15.95 桁に相当します。ただし、実装ではこれを 15 (DBL_DIG) に切り捨てます。これにより、事実上、追加の 10 進数の精度が付与されます。
指定された値に最も近い表現可能な数値を返す nextafter() 関数を利用すると、精度の微妙な違いを示すことができます。 1.0/7.0 の場合、nextafter() は 2 つの隣接する表現可能な値を段階的に出力し、DBL_DIG では 15 進数が推奨されていますが、10 進数で約 16 桁の精度を示します。
結論:
倍精度値の精度は、有効ビットと表現可能な桁の間のトレードオフに依存します。理論上の精度は小数点以下 15 桁を示唆していますが、丸めや IEEE 表現の固有の性質により、場合によっては 16 桁まで拡張されることがあります。これらの要素を理解することは、数値計算で 10 進表現を処理するために重要です。
以上が倍精度浮動小数点演算では、10 進数 15 桁ではなく 16 桁の精度が提供される場合があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。