倍精度の小数点以下の桁数
質問:
倍精度の値が小数点以下 15 桁の精度ですが、多くの場合、内部値はより高い精度を示します。この矛盾はなぜ観察されるのでしょうか?
答え:
IEEE double には 53 の有効ビットがあり、約 15.95 桁の 10 進精度を提供します (式 log10(253))。この理論上の精度は、DBL_DIG 定数で示される 10 進数 15 桁よりわずかに大きくなります。追加の精度は、追加の有効ビットによって説明されます。
nextafter() 関数は、指定された double の真の精度を示します。指定された値に最も近い表現可能な数値を計算すると、倍精度値には通常 16 桁の有効数字があることがわかります。これを示すプログラムは次のとおりです。#include <cstdio> #include <cfloat> #include <cmath> int main() { double x = 1.0/7.0; printf("FLT_RADIX = %d\n", FLT_RADIX); printf("DBL_DIG = %d\n", DBL_DIG); printf("DBL_MANT_DIG = %d\n", DBL_MANT_DIG); printf("%.17g\n%.17g\n%.17g\n", nextafter(x, 0.0), x, nextafter(x, 1.0)); }出力は通常、次のことを示します。 :
以上が倍精度数値が小数点以下 15 桁よりも正確に見えるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。