Ieee 754 ieee754中的指数

Ieee 754 ieee754中的指数,ieee-754,exponent,Ieee 754,Exponent,为什么浮点中的指数被127替换? 好吧,真正的问题是:与2的补码表示法相比,这种表示法的优点是什么?32位浮点中的指数由8位组成,但没有符号位。因此,范围实际上是[0;255]。为了表示

为什么浮点中的指数被127替换?

好吧,真正的问题是:与2的补码表示法相比,这种表示法的优点是什么?

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


这样,可以非常精确地表示非常小的数字。在[0;255]范围内,小数字必须表示为
2^0*0。尾数
,尾数中有很多零。但在[-127;128]范围内,小数字更精确,因为它们可以表示为
2^-126*0.尾数
(尾数中不必要的零更少)。希望您能理解。

由于存储的指数是无符号的,所以可以使用整数指令来比较浮点值。为了便于比较,整个浮点值可以被视为一个有符号的整数值(而不是两个互补值)

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

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

,回应ysap的回答(很抱歉,这应该是对我的答案的后续评论,但原始答案是以未注册用户的身份输入的,因此我还无法对其进行评论)


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

我相信他是在问为什么使用偏移量而不是2的补码。对不起,我不知道U2是什么意思。嗯,我在某处找到了“U2”符号,我想这是一个缩写:|现在我在谷歌上搜索它时,我认为这是某种错误。显然我在想2的补码表示法。如果我们使用2的补码表示法,效果不是一样吗?这不完全正确。两个负浮点值不能作为有符号整数进行正确比较。所有其他情况都可以正常工作。@Stephen:是的,浮点数可以作为有符号的大小整数进行比较,而不是两个互补整数,符号位需要一些特殊的大小写处理。“整个浮点值可以被视为有符号整数值”“肯定是不正确的。考虑一下改变答案吗?”Potatoswatter:我改变/澄清了答案。你是否否决了我的答案?这不是错误信息。一个是隐式存储的指数>126,但是零被隐式存储为-126。它被称为“去标准化数”。。我没有否决你的答案,但你的答案基本上仍然是误导性的/不正确的。你提到2^-126*0。尾数,但如果指数是-126,那么指数+偏差=1,因此它不是非规范化数字,因此隐式存储1。此外,你只提到“小数字”,那么截止点在哪里?指数-127和128(二进制0和255)是小数字(包括+-0)和无穷大/NaN的特殊范围。对于二进制1,公式是
+-2^-126*1。尾数
,但是对于二进制0,公式是
+-2^-126*0。尾数
,导致数字的一致范围。我猜“截止”是指最小的可表示(非零)数字?-那将是尾数集最后一位的非规范化数字=
2^-126*0。尾数
=
2^-126*2^-23
。我看不出我的答案有任何错误。我知道你所说的截断是什么意思,我只是说你的答案不清楚截断。否则,我意识到我错了。我习惯了看到表示为1-(1-0.尾数)的非规范化数字(如(1-2^-23)*2^-126)。因此,当我看到您的数字为2^-126*0.尾数时,我假设您混淆了。IEEE标准实际上支持从-126到+127的单精度指数;通常映射到-127和+128的指数编码具有特殊意义(零和非规范,无穷和南)。哦,我完全同意。这里,有一些代表,你可以评论=)