2

为什么浮点数中的指数被 127 取代?
好吧,真正的问题是:与 2 的补码表示法相比,这种表示法的优势是什么?

4

5 回答 5

6

由于存储的指数是无符号的,因此可以使用整数指令来比较浮点值。整个浮点值可以被视为有符号幅度整数值以进行比较(而不是二进制恭维)。

于 2010-02-14T21:55:01.067 回答
1

只是为了纠正一些错误信息:它是2^n * 1.mantissa,分数前面的 1 被隐式存储。

于 2010-02-14T22:23:45.577 回答
1

请注意,在有偏和 2 的补码之间,指数的可表示范围略有不同。IEEE 标准支持 (-127 到 +128) 范围内的指数,而如果它是 2 的补码,它将是 (-128 到 +127)。我真的不知道标准选择偏差形式的原因,但也许委员会成员认为允许极大的数字比允许极小的数字更有用。

于 2010-02-16T17:07:06.197 回答
1

@Stephen Canon,回应ysap的回答(对不起,这应该是对我的回答的后续评论,但原始答案是作为未注册用户输入的,所以我还不能真正发表评论)。

斯蒂芬,显然你是对的,我提到的指数范围是不正确的,但答案的精神仍然适用。假设如果它是 2 的补码而不是偏置值,并且假设 0x00 和 0xFF 值仍然是特殊值,那么偏置指数允许比 2 的补码指数大 (2x) 的数字。

于 2010-02-16T17:41:39.537 回答
0

32 位浮点数中的指数由 8 位组成,但没有符号位。所以范围实际上是 [0;255]。为了表示数字 < 2^0,该范围移动了 127,变为 [-127;128]。

这样,可以非常精确地表示非常小的数字。对于 [0;255] 范围,必须将小数字表示为2^0 * 0.mantissa尾数中有很多零。但是对于 [-127;128] 范围,较小的数字更精确,因为它们可以表示为2^-126 * 0.mantissa(尾数中不必要的零较少)。希望你明白这一点。

于 2010-02-14T21:54:40.443 回答