2017-04-21 124 views
1

我的編譯器告訴我,sizeof(long double)的大小是16字節,這意味着它可以表示一個數字2^128。現在,我想知道精度可以處理多少位數。例如,如果x= 0.1234567812345678,可以long double這裏確定x的確切精度?如何識別long double數據類型的精度

謝謝

+4

「[[]]這意味着它可以代表一個數字2^128」 - 呃不,它不是你知道的整數。所有位不可用於存儲整數部分。 – unwind

+0

請注意,實際的浮點數可能只有80位(如果您在x86上)。編譯器保留128位進行對齊。 –

回答

0

我想知道,直到有多少數字的精度可以處理。

LDBL_DIG,在<float.h>,是顯著十進制數字最小數目將從文本轉換爲long double區別的數量。在你的平臺上,它至少有10個,可能是18個左右。 0.1234567812345678123.4567812345678有16位重要的十進制數字。


我的編譯器告訴我的sizeof的大小(長雙)爲16字節,這意味着它可以代表人數多達2^128

這可能意味着類似的東西如果long double是一個整數,但浮點數分佈爲logarithmically。此外,有些系統不會將全部16個字節用於數據。有些是填充。 @unwind@Sven Marnach。使用<float.h>中的值來表徵您的平臺正在使用的long double


如果x= 0.1234567812345678,可以long double識別x準確精度?

不,除非您在使用十進制浮點的罕見平臺上。

大多數平臺使用二進制浮點。因此,除非數字可以表示爲2的冪的精確和,例如42.125,否則保存爲long double的值將爲近似值。代碼將文本0.1234567812345678轉換爲最近的long double,其可能具有精確值0.1234567812345677972896140772718354128301143646240234375

+0

非常感謝。清晰準確的答案:) – Medo