2011-10-12 70 views

回答

5

這是一個技巧性的問題。

浮點格式定義了一些特殊值。你是否將這些視爲不同取決於你的觀點。以下是雙精度(binary64):

  1. 有0兩種表示:與該符號位爲0或1和二者的指數和尾數都爲零。這些值可以通過1/+ 0 =無窮大和1/-0 = - 無窮的事實來區分。但他們比較平等。
  2. 有2個無窮大,前12位是0x7ff或0xfff,尾數都是零。這些不是有限的實數,而是價值。
  3. 有一整個範圍的非數字(NaN)值,具有符號+指數位0x7ff(信號NaN)或0xfff(「安靜」NaN)和非零尾數。再次,這些不是實數,但它們是可區分的值。

因此,要總結:

  1. 區分的值(實數或其他)的總數爲2^64。
  2. 不同的實數的數量,不包括無窮多,只計算一次零,爲2*(2^11-1)*2^52-1 = 18,437,736,874,454,810,623

對於binary16,不同實數的個數爲2*(2^5-1)*2^10-1 = 63,487。對於binary32,它是2*(2^8-1)*2^23-1=4,278,190,079。對於binary128,它是2*(2^15-1)*2^112-1或約3.4*10^38

+0

是的,我忘了NaN範圍。所以對於binary32有2 *(2^8-1)* 2^23-1 = 4278190079,對嗎? – user894319twitter

+0

爲清楚起見,使用binary16:它是'2 *(2^5-1)*(2^10-1)'還是'(2 *(2^5-1)* 2^10)-1'?後者對我來說更有意義,但如果它是前者,你能否澄清? –

相關問題