首頁 >後端開發 >C++ >為什麼雙精度數看起來比小數點後 15 位更精確?

為什麼雙精度數看起來比小數點後 15 位更精確?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-30 18:04:16631瀏覽

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

雙精確度小數位

問題:

儘管文件顯示雙精確度值有精確度為15 位小數,內部值通常表現出更高的精度。為什麼會出現這種差異?

答案:

IEEE 雙精度數有53 個有效位,提供約15.95 位十進位精度(基於公式log10(253) )。此理論精度略大於 DBL_DIG 常數指示的 15 位十進制數字。額外的精度由額外的有效位元決定。

nextafter() 函數示範給定雙精度的真實精度。透過計算給定值最接近的可表示數字,可以發現雙精確度值通常有 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 個有效位元表示數字。
  • 最後一個十六進位位元在 0 和 1 之間交替表示連續值。
  • 數學值 1.0/7.0 (0.142857142857142857) 僅以雙精度近似表示。

以上是為什麼雙精度數看起來比小數點後 15 位更精確?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn