0

我正在阅读“C 科学计算艺术中的数值食谱”,在第一章中有一节讨论了浮点数是如何从某种架构不可知的角度表示的。这篇文章与英特尔处理器的 i386 系列有关,以及浮点数在该架构中的表示方式。我的问题专门针对如何计算有偏指数以及如何表示尾数。是否存储在尾数中的前导数。

在“C 科学计算艺术中的数值食谱”中,我得到了公式:

s XMXB^(e - E) : s 是表示符号的单个位,M 是尾数,B 是底数(底数 2),e 是指数,E 是指数的偏差。

  1. e 是存储在 2 的补码中,还是一个无符号的 8 位字段?
  2. E 是偏差。偏差是 127 吗?
  3. 尾数是读作 1.00000(2) 还是读作 0.0000000(2)?其中 (2) 是基数 2。
4

2 回答 2

1

是的——包括 64 位在内的所有英特尔 86 系列都支持 IEEE 754 浮点标准。

从来源:

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

要回答 IEEE 754 - 它是如何工作的,请参阅:

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

于 2012-12-09T02:07:58.570 回答
1
  1. e 是一个无符号的 8 位字段。偏差 (E) 可以让您同时表示正指数和负指数。这是一个比二进制补码更适合进行实际计算的表示,即使考虑起来有点尴尬。

  2. 偏差是什么取决于浮点类型。对于标准 IEEE 浮点数,它是 127。对于标准 IEEE 双精度数,它是 1023。

  3. 不明白你的意思。对于标准的 float 和 double 类型,在尾数之前隐含 1 位表示正常数,而没有表示次正常数。如果您有二进制表示(符号、指数、尾数)为 的 IEEE 浮点数0 01111111 01110111011101110111011,您可以将其解读为(-1)^0 * 2^(01111111b) * 1.01110111011101110111011b 注意尾数之前的前导1.

当指数尽可能小(零)时,您有次正规数。当指数尽可能大(全为)时,您有无穷大和 NaN。尾数在这里意味着不同的东西。所有其他指数代表“正常数”。

对于英特尔的 80 位long double类型,没有隐含的 1 位(它存储在尾数的高位中),我不记得当您尝试使用long double具有正常表示但隐含位是的 s进行算术时会发生什么关闭。我认为他们这样做是为了让 x87 更容易构建。

于 2012-12-09T11:33:07.030 回答