为什么浮点数中的指数被替换为127? 那么,真正的问题是:与2的补码表示法相比,这种符号的优点是什么?
答案 0 :(得分:6)
由于存储的指数是无符号的,因此可以使用整数指令来比较浮点值。为了比较的目的,可以将整个浮点值视为有符号大小的整数值(不是两个补码)。
答案 1 :(得分:1)
只是纠正一些错误信息:它是2^n * 1.mantissa
,隐含地存储了分数前面的1。
答案 2 :(得分:1)
请注意,指数的可表示范围与偏差和2的补码之间存在细微差别。 IEEE标准支持范围为(-127到+128)的指数,而如果它是2的补码,则为(-128到+127)。我真的不知道标准选择偏见形式的原因,但也许委员会成员认为允许极大数字而不是极小数字会更有用。
答案 3 :(得分:1)
@Stephen Canon ,回应 ysap 的回答(对不起,这应该是对我的回答的跟进评论,但原来的回答输入为一个未注册的用户,所以我还不能评论它。)
斯蒂芬,显然你是对的,我提到的指数范围是不正确的,但答案的精神仍然适用。假设如果它是2的补码而不是偏置值,并假设0x00和0xFF值仍然是特殊值,则偏置指数允许(2x)大于2的补码指数。答案 4 :(得分:0)
32位浮点数中的指数由8位组成,但没有符号位。所以范围实际上是[0; 255]。为了表示数字< 2 ^ 0,该范围移动127,变为[-127; 128]。
这样,可以非常精确地表示非常小的数字。对于[0; 255]范围,小数字必须表示为2^0 * 0.mantissa
,尾数中有许多零。但是对于[-127; 128]范围,小数字更精确,因为它们可以表示为2^-126 * 0.mantissa
(在尾数中具有较少的不必要的零)。希望你明白这一点。