雙精確度小數位
問題:
儘管文件顯示雙精確度值有精確度為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)); }
輸出通常顯示: :
以上是為什麼雙精度數看起來比小數點後 15 位更精確?的詳細內容。更多資訊請關注PHP中文網其他相關文章!