我正在阅读“科学计算的艺术中的数字食谱”,在第一章中,有一节讨论了浮点数是如何从某种架构不可知的角度来表示的 . 这篇文章涉及英特尔处理器的i386系列,以及该架构中浮点数的表示方式 . 我的问题专门针对如何计算偏差指数以及如何表示尾数 . 是否存储在尾数中的前导者 .
在“科学计算的艺术中的数字食谱”中,给出了以下公式:
s X M X B ^(e - E):s是表示符号的单个位,M是尾数,B是基数(基数2),e是指数,E是指数的偏差 .
-
是以2的补码存储,还是无符号的8位字段?
-
E是偏见 . 偏见127?
-
尾数是读为1.00000(2)还是读为.0000000(2)?其中(2)是基数2 .
2 回答
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
类型,没有隐含的1位(它存储在尾数的高位),我不记得当你尝试使用具有正常表示但隐含的long double
算术时会发生什么位已关闭 . 我认为他们这样做是为了让x87更容易构建 .是的 - 所有intel 86系列包括64位支持IEEE 754浮点标准 .
从来源:
http://www.intel.com/standards/floatingpoint.pdf
要回答IEEE 754 - 它是如何工作的,请参阅:
http://en.wikipedia.org/wiki/IEEE_754-2008