【发布时间】:2010-02-14 21:47:07
【问题描述】:
为什么浮点数中的指数被 127 取代了?
那么,真正的问题是:与 2 的补码表示法相比,这种表示法有什么优势?
【问题讨论】:
为什么浮点数中的指数被 127 取代了?
那么,真正的问题是:与 2 的补码表示法相比,这种表示法有什么优势?
【问题讨论】:
由于存储的指数是无符号的,因此可以使用整数指令来比较浮点值。整个浮点值可以被视为有符号幅度整数值以进行比较(而不是二进制恭维)。
【讨论】:
只是为了纠正一些错误信息:它是2^n * 1.mantissa,分数前面的 1 被隐式存储。
【讨论】:
+- 2^-126 * 1.mantissa,但对于二进制 0,公式是 +- 2^-126 * 0.mantissa,导致数字范围一致。我猜“截止”是指最小的可表示(非零)数字? - 那将是尾数集的最后一位 = 2^-126 * 0.mantissa = 2^-126 * 2^-23 的非规范化数字。我的回答中看不到任何不正确的地方。
请注意,在有偏和 2 的补码之间,指数的可表示范围略有不同。 IEEE 标准支持 (-127 到 +128) 范围内的指数,而如果它是 2 的补码,它将是 (-128 到 +127)。我真的不知道标准选择偏差形式的原因,但也许委员会成员认为允许非常大的数字比允许非常小的数字更有用。
【讨论】:
@Stephen Canon,回应 ysap 的回答(抱歉,这应该是对我的回答的后续评论,但原来的回答输入为一个未注册的用户,所以我还不能真正评论它)。
斯蒂芬,显然你是对的,我提到的指数范围是不正确的,但答案的精神仍然适用。假设如果它是 2 的补码而不是偏置值,并且假设 0x00 和 0xFF 值仍然是特殊值,那么偏置指数允许比 2 的补码指数大 (2x) 的数字。
【讨论】:
32 位浮点数中的指数由 8 位组成,但没有符号位。所以范围实际上是 [0;255]。为了表示
这样,可以非常精确地表示非常小的数字。对于 [0;255] 范围,小数字必须表示为 2^0 * 0.mantissa,尾数中有很多零。但是对于 [-127;128] 范围,较小的数字更精确,因为它们可以表示为 2^-126 * 0.mantissa(尾数中不必要的零较少)。希望你明白这一点。
【讨论】: