2012-12-09 42 views
0

我正在閱讀「C中的數值計算科學計算的藝術」,並在第一章中討論瞭如何從某種架構不可知的角度表示浮點數。本文屬於英特爾處理器的i386系列,以及該架構中如何表示浮點數。我的問題具體針對如何計算有偏指數以及如何表示尾數。是否存儲在尾數中的主要數據?英特爾:計算浮點數

在 「數字食譜在科學計算的C中的藝術」,我給出的公式:

小號XMXB ^(E - E):s爲表示符號的單個比特,M是尾數,B是基數(基數2),e是指數,E是指數上的偏差。

  1. 存儲在2的補E,或者是一個無符號的8位字段?
  2. E是偏見。是偏見127?
  3. 尾數是讀爲1.00000(2)還是讀爲.0000000(2)?其中(2)是基數2.

回答

1
  1. e是一個無符號的8位字段。偏差(E)可以讓你表示正負指數。對於做實際計算而言,這比稍微比二進制補碼更具說服力,即使考慮起來有些尷尬。

  2. 偏差是什麼取決於浮點類型。對於標準的IEEE浮點數,它是127.對於標準的IEEE雙倍,它是1023.

  3. 不確定你的意思。對於標準浮點數和雙精度浮點數,在正常數的尾數前有一個隱含的位,而對於正常數則沒有。如果您有IEEE浮點數,其二進制表示(符號,指數,尾數)爲0 01111111 01110111011101110111011,則可以將其讀爲(-1)^0 * 2^(01111111b) * 1.01110111011101110111011b注意尾數前的前導1.

當指數儘可能小(零)時,就會出現次正常數。當指數儘可能大(全部爲1)時,你就有無窮大和NaN。尾數在這裏意味着不同。所有其他指數代表「正常數字」。

對於Intel的80位long double型,有沒有隱含的1位(它被存儲在尾數的高位),我不記得,當你嘗試做算術與long double S作會發生什麼一個正常的表示,但隱含的位被關閉。我認爲他們這樣做使x87更容易建立。

1

是 - 所有intel 86系列包括64位支持IEEE 754浮點標準。

從來源:

http://www.intel.com/standards/floatingpoint.pdf

要回答IEEE 754 - 它是如何工作的,請參閱:

http://en.wikipedia.org/wiki/IEEE_754-2008

+0

這不是你的錯,但現在英特爾鏈接已斷開。 – Jeff

+0

剛試過-ok。 –

+0

我嘗試了兩臺使用Safari和Chrome的機器,curl和wget,其中沒有一個能夠工作。我試穿了英特爾公司的VPN。什麼都沒有我不明白它是如何爲你工作的。 – Jeff