首页 文章

英特尔:计算浮点数

提问于
浏览
0

我正在阅读“科学计算的艺术中的数字食谱”,在第一章中,有一节讨论了浮点数是如何从某种架构不可知的角度来表示的 . 这篇文章涉及英特尔处理器的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 回答

  • 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 类型,没有隐含的1位(它存储在尾数的高位),我不记得当你尝试使用具有正常表示但隐含的 long double 算术时会发生什么位已关闭 . 我认为他们这样做是为了让x87更容易构建 .

  • 1

    是的 - 所有intel 86系列包括64位支持IEEE 754浮点标准 .

    从来源:

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

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

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

相关问题