ホームページ >バックエンド開発 >C++ >倍精度数値が小数点以下 15 桁よりも正確に見えるのはなぜですか?

倍精度数値が小数点以下 15 桁よりも正確に見えるのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-30 18:04:16642ブラウズ

Why Do Double-Precision Numbers Seem More Precise Than 15 Decimal Places?

倍精度の小数点以下の桁数

質問:

倍精度の値が小数点以下 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));
}
出力は通常、次のことを示します。 :

    1.0/7.0 は約 16 の有効桁数で表されます
  • 連続する値の場合、最後の 16 進ビットは 0 と 1 の間で切り替わります。
  • 1.0/7.0 (0.142857142857142857) の数学的値は、ほぼ倍精度でのみ表されます。

以上が倍精度数値が小数点以下 15 桁よりも正確に見えるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。