我正在阅读“科学计算的艺术中的数字食谱”,在第一章中,有一节讨论了浮点数是如何从某种架构不可知的角度来表示的。这篇文章涉及英特尔处理器的i386系列,以及该架构中浮点数的表示方式。我的问题专门针对如何计算偏差指数以及如何表示尾数。是否存储在尾数中的前导者。
在“科学计算的艺术中的数字食谱”中,给出了公式:
s XMXB ^(e - E):s是表示符号的单个位,M是尾数,B是基数(基数2),e是指数,E是指数的偏差。 / p>
答案 0 :(得分:1)
Yup - 包括64位的所有intel 86系列都支持IEEE 754浮点标准。
来自消息来源:
http://www.intel.com/standards/floatingpoint.pdf
要回答IEEE 754 - 它是如何工作的,请参阅:
答案 1 :(得分:1)
e是无符号8位字段。偏差(E)可以让你代表正面和负面的指数。对于进行实际计算,这是一个比两个补码稍微更清晰的表示,即使考虑起来有点尴尬。
偏差取决于浮点类型。对于标准IEEE浮点数,它是127.对于标准IEEE双精度数,它是1023。
不确定你的意思。对于标准的float和double类型,正常数字的尾数前面隐含1位,而正常数字则没有。如果你的IEEE浮点数的二进制表示(符号,指数,尾数)是0 01111111 01110111011101110111011
,你可以将其读作(-1)^0 * 2^(01111111b) * 1.01110111011101110111011b
注意尾数前的前导1.
。
当指数尽可能小(零)时,您有次正规数。当指数尽可能大(全部为1)时,你有无穷大和NaN。尾数意味着不同的东西。所有其他指数代表“正常数字”。
对于Intel的80位long double
类型, no 暗示1位(它存储在尾数的高位),我不记得当你发生了什么尝试使用具有正常表示但隐含位被关闭的long double
进行算术运算。我认为他们这样做是为了让x87更容易构建。