[英]What is the smallest exact representation of 1/(2^x) that can be represented in the C programming language?
可以用C編程語言表示的1 /(2 ^ x)的最小精確表示形式是什么?
在大多數平台上,C的double
與IEEE 754 double precision格式相同 。 那里支持的最接近零的正值是2 ^ -1022(等於1/2 ^ 1022)。
但是,如果允許用戶定義類型,則沒有限制,因為您始終可以將指數表示為bigint。
使用IEEE-754 double
進行算術運算,最小的精確值1/2 ^ n為:
double
最大的可表示的精確冪。 0x1.0p-1074
或0x0.0000000000001p-1022
。 如果您使用其他類型,請在x86機器上使用將其映射到80位浮點數的編譯器說long double
,則最小值可以小很多(2 ^ -16446,假設我正確地執行了算法=)
如果您使用GNU MP庫 (用C編寫),那么您可以表示任何值,直至RAM安裝量。
0,即1 /(2 ^ inf);)
更嚴重的是,這是雙精度浮點數中指數位的問題。 我不認為C標准本身會定義大小,但是IEEE 754確實將其定義為具有11個指數位。
讓我們暫時忽略異常。 由於最小指數值為-1022,因此應為1 /(2 ^ 1022)。 但是,這時就會出現異常,IIRC根本不應該包含任何隱式1位。 因此,非正規數均勻地分布在0..1 /(2 ^ 1022)范圍內,從而為log2(52)提供了更多值IIRC。 因此,我認為最終答案應為1 /(2 ^(1074))。
如果將變量存儲為64位負指數,則為1/2 ^(2 ^ 63-1)。 :)
這真是個小數目。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.