Binary 为什么IEEE浮点数使用有偏形式计算指数?

Binary 为什么IEEE浮点数使用有偏形式计算指数?,binary,computer-science,Binary,Computer Science,比方说,对于c中的浮点类型,根据IEEE浮点规范,分数字段使用了8位,计算时首先取这8位,并将其转换为一个无符号数,然后减去偏差,即2^7-1=127,结果是指数范围为-127到128,包含全部费用但是为什么我们不能把这些8位模式当作一个有符号的数字,因为结果的范围是[-128127],这与前面的几乎相同 偏差的目的是使指数以无符号形式存储,便于进行比较。发件人: 通过排列字段,使符号 位位于最高有效位 位置,在 中间,然后是最小的尾数 有效位,结果值 将正确订购,无论是否 解释为浮点或 整数值

比方说,对于c中的浮点类型,根据IEEE浮点规范,分数字段使用了8位,计算时首先取这8位,并将其转换为一个无符号数,然后减去偏差,即2^7-1=127,结果是指数范围为-127到128,包含全部费用但是为什么我们不能把这些8位模式当作一个有符号的数字,因为结果的范围是[-128127],这与前面的几乎相同

偏差的目的是使指数以无符号形式存储,便于进行比较。发件人:

通过排列字段,使符号 位位于最高有效位 位置,在 中间,然后是最小的尾数 有效位,结果值 将正确订购,无论是否 解释为浮点或 整数值。这允许高速运行 浮点数的比较 使用定点硬件

所以基本上,浮点数是:

[sign] [unsigned exponent (aka exponent + bias)] [mantissa]
提供了有关为什么这样做很好的极好信息—特别是比较浮点比较函数的实现


此外,关于浮点奇点的完整答案必须提到“它很长,很密集,数学上有点繁重,但它是长而密集的数学黄金(或类似的东西)。

好问题。还有为什么会有愚蠢的符号位,而不是像正常人那样将尾数视为2的补码。@Pavel Radzivilovsky:你不能将尾数视为2的补码,因为它是用隐式高位规范化的。在这种情况下,2的补码有什么好处?@Pavel,仍然有处理器没有FPU,f.e.ARMs。至少使这个操作在整数上容易进行,可以加快模拟FPU的速度。@liori最近的ARM处理器确实有FPU[1],但是,@Pavel,当IEEE-754浮点规范在1985年首次达成一致时,大多数处理器没有。例如,8086—原始x86!-只有通过可选扩展处理器8087“x87”的FPU。直到1989年推出的80486才包括FPU。[2] [1][2]@Daniel G:你甚至可以在没有机载FPU的情况下获得486。486 SX是一种营销策略,在这种策略中,他们禁用了芯片的FPU部分,并以比全功能486(他们对486 DX进行了重新修改)更便宜的价格出售。第一款奔腾有板载FPU,但你不想要它@liori,我认为用2的补码会更容易。@Pavel Radzivilosvsky:不,如果指数在2的补码中,比较两个FP数会更难。如果指数在2的补码中,则0和1之间的FP数的整数表示(排除)将比大于或等于1的数的整数表示更大。