让我们说,对于c中的 float 类型,根据IEEE浮点规范,有8位用于分数字段,并且计算为首先采用这些8位并将其转换为无符号数字,然后减去BIASE,即2 ^ 7 - 1 = 127,结果是指数范围从-127到128(含)。但是为什么我们不能将这些8位模式视为有符号数,因为结果范围是[-128,127],几乎与前一个相同。
答案 0 :(得分:16)
偏差的目的是使指数以无符号形式存储,从而更容易进行比较。来自Wikipedia:
通过安排字段使标志 位是最重要的位 位置,偏见的指数 中间,然后至少是尾数 有效位,结果值 无论如何都会正确订购 解释为浮点或 整数值。这允许高速 浮点数的比较 使用定点硬件。
基本上,浮点数是:
[sign] [unsigned exponent (aka exponent + bias)] [mantissa]
This website提供了有关为什么这样做的优秀信息 - 特别是,比较浮点比较函数的实现。
此外,没有关于浮点奇怪的完整答案可以不提及“What Every Computer Scientist Should Know About Floating-Point Arithmetic”。数学时间长,密集且有点沉重,但它是长期密集的数学金(或类似的东西)。