Floating point 理解IEEE中的指数00000000和11111111
我无法理解这些指数:Floating point 理解IEEE中的指数00000000和11111111,floating-point,computer-science,ieee,Floating Point,Computer Science,Ieee,我无法理解这些指数: 为什么指数0000 0000=-126而不是-127(即0-127)? 指数的准确值是多少 为什么011111100000000等于无穷大 我对这一切都很陌生,所以请用简单的俗语解释一下!谢谢 单精度浮点的指数偏差为127。这意味着指数值127(1000 0000)被评估为实际指数零,指数值1(0000 0001)被评估为实际指数-126 所有零位或所有一位的指数值(0000 0000或1111111)不是实际指数,而是触发特殊情况行为。全零指数意味着尾数中没有隐含
- 为什么指数
=-126而不是-127(即0-127)?0000 0000
- 指数的准确值是多少
- 为什么
等于无穷大011111100000000
单精度浮点的指数偏差为127。这意味着指数值127(
1000 0000
)被评估为实际指数零,指数值1(0000 0001
)被评估为实际指数-126
所有零位或所有一位的指数值(0000 0000
或1111111
)不是实际指数,而是触发特殊情况行为。全零指数意味着尾数中没有隐含的前导一位;这是用来做运动的。一个全一指数用来标记值是无穷大,负无穷大,或者,取决于符号位和尾数位
对于进一步阅读,有一个很好的解释,用简单的术语,当然,如果你真的想了解细节,没有什么比这更好的了
为什么指数0000 0000
=-126而不是-127(即0-127)
对于大多数正态指数,当我们到达有效位范围的底部时,我们会下降到下一个指数。例如,从1(包括)到2(排除)的可表示数字按降序排列:
- 1.11…111•20
- 1.11…110•20
- 1.11…101•20
- 1.11…100•20
- 1.00…011•20
- 1.00…010•20
- 1.00…001•20
- 1.00…000•20
- 1.11…111•2−一,
- 1.11…110•2−一,
- 1.11…101•2−一,
- 1.11…100•2−一,
- 1.00…011•2−126,
- 1.00…010•2−126,
- 1.00…001•2−126,
- 1.00…000•2−126
x
和y
是这些数字,由于四舍五入(当四舍五入到最接近的可表示值时),它们的计算差值x-y
必须为0。然而,有时人们编写的代码是这样的:
if (x == y)
Handle special case.
else
Handle normal case with some calculation involving division by x-y.
所以继续指数模式−127会破坏一些代码,导致浮点运算以不希望的方式运行。因此,我们选择打破这种模式,将指数保持在−126,并使前导位为0而不是1。下一个可表示的数字是:
- 0.11…111•2−126,
- 0.11…110•2−126,
- 0.11…101•2−126,
- 0.11…100•2−126,
- 0.00…011•2−126,
- 0.00…010•2−126,
- 0.00…001•2−126,
- 0.00…000•2−126
这没有数学上的原因。对有效位和指数执行的任何数学运算都不会产生无穷大。刚刚决定,指数字段1111111将表示无穷大和NaN,当有效位字段全为零时,它表示无穷大,当有效位字段不全为零时,它表示NaN。我理解了你写的大部分内容,但有一个问题:在1.00…000•2^-126之后,为什么不能用1.11…111•2^-127而不是0.11…111•2^-126?因为+/-
1.0*2^-127
之间还有很大的差距。通过将其指数保持在2^-126
,非规范数正好填补了+/-1.0*2^-126
之间的空白,包括0
@doctopus:1.11…111•2^-127的实际相当重要的表示形式比0.11…111•2^-126更接近之前的数字(更大),但请注意,前面已经说过,我们决定将前导位改为0,而不是降低指数。做出这一决定的原因并不是要在那一点上减小间隙大小,而是因为它会产生算术特性。如果我们把指数降到−127,之后的下一步必须是归零,因为我们没有指数了。然后会存在不同的数字,它们的减法产生零……这可能会破坏人们编写的一些代码,例如如果(x!=y){做一些计算,包括除以x-y}
。例如,减去1.11…111•2^-127和1.11…110•2^-127在数学上是1•2^−150,但这无法表示,因此必须四舍五入为零。B