簡體   English   中英

可以用C編程語言表示的1 /(2 ^ x)的最小精確表示形式是什么?

[英]What is the smallest exact representation of 1/(2^x) that can be represented in the C programming language?

可以用C編程語言表示的1 /(2 ^ x)的最小精確表示形式是什么?

在大多數平台上,C的doubleIEEE 754 double precision格式相同 那里支持的最接近零的正值是2 ^ -1022(等於1/2 ^ 1022)。

但是,如果允許用戶定義類型,則沒有限制,因為您始終可以將指數表示為bigint。

使用IEEE-754 double進行算術運算,最小的精確值1/2 ^ n為:

  • 2 ^ -1022(如果您的平台不具有非常規支持)
  • 2 ^ -1023(如果您的平台具有非常規支持),但您堅持使用1.0 / 2 ^ n進行計算; 這是因為2 ^ 1023是double最大的可表示的精確冪。
  • 2 ^ -1074,如果您的平台支持非標准格式,並且您不介意直接指定該值,例如使用C99十六進制浮點表示法: 0x1.0p-10740x0.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM