我的編譯器告訴我,sizeof(long double)
的大小是16字節,這意味着它可以表示一個數字2^128
。現在,我想知道精度可以處理多少位數。例如,如果x= 0.1234567812345678
,可以long double
這裏確定x
的確切精度?如何識別long double數據類型的精度
謝謝
我的編譯器告訴我,sizeof(long double)
的大小是16字節,這意味着它可以表示一個數字2^128
。現在,我想知道精度可以處理多少位數。例如,如果x= 0.1234567812345678
,可以long double
這裏確定x
的確切精度?如何識別long double數據類型的精度
謝謝
我想知道,直到有多少數字的精度可以處理。
LDBL_DIG
,在<float.h>
,是顯著十進制數字最小數目將從文本轉換爲long double
區別的數量。在你的平臺上,它至少有10個,可能是18個左右。 0.1234567812345678
和123.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
。
非常感謝。清晰準確的答案:) – Medo
的header float.h
包含一些宏desribing不同的浮點數據類型的精度;例如LDBL_MANT_DIG
爲您提供long double
的尾數中的二進制數字數。
如果您不瞭解浮點數的格式,我建議您閱讀What Every Computer Scientist Should Know About Floating-Point Arithmetic。
簡潔的回答:詳細說明'LDBL_MANT_DIG'的小數位數,它們是_usually_二進制數。 – chux
「[[]]這意味着它可以代表一個數字2^128」 - 呃不,它不是你知道的整數。所有位不可用於存儲整數部分。 – unwind
請注意,實際的浮點數可能只有80位(如果您在x86上)。編譯器保留128位進行對齊。 –