理解IEEE中的指数00000000和11111111

doc*_*pus 2 floating-point computer-science ieee

我无法理解这些指数:

  • 为什么指数0000 0000= -126而不是-127(即0-127)?
    • 指数的确切值是1111 1111多少?
    • 为什么0 1111 1111 0000 0000 0000 0000 0000 000等于无穷大?

我对这一切都很陌生,所以请用简单的术语解释!谢谢!

Eri*_*hil 6

为什么指数0000 0000= -126而不是-127(即0-127)?

对于大多数正常指数,当我们到达有效数范围的底部时,我们逐步下降到下一个指数.例如,从1(含)到2(不包括)的可表示数字按降序排列:

  • 1.11 ... 111•2 0,
  • 1.11 ... 110•2 0,
  • 1.11 ... 101•2 0,
  • 1.11 ... 100•2 0,
  • ...
  • 1.00 ... 011•2 0,
  • 1.00 ... 010•2 0,
  • 1.00 ... 001•2 0,
  • 1.00 ... 000•2 0.

然后,当进入下一个较低的数字时,我们调整指数,所以下一个较低的数字是:

  • 1.11 ... 111•2 -1,
  • 1.11 ... 110•2 -1,
  • 1.11 ... 101•2 -1,
  • 1.11 ... 100•2 -1,
  • ...

现在,当我们处于最低正常指数时,此范围内的最小数字为:

  • 1.00 ... 011•2 -126,
  • 1.00 ... 010•2 -126,
  • 1.00 ... 001•2 -126,
  • 1.00 ... 000•2 -126.

为了继续这一点,我们决定最后一步是将前导位更改为0而不是1.这里有一个选择:指数字段中带零的数字可以继续该模式,继续指数-127,所以下一个可表示的数字将是1.11 ... 111•2 -127,或者它们可以保持在指数-126但是将前导位更改为0而不是1.

如果模式继续,那么,例如,1.11 ... 111•2 -127和1.11 ... 110•2 -127都是可表示的数字,但它们的差异,0.00 ... 001•2 -127 = 1•2 -150,不会代表.因此,如果x并且y这些数字,它们的计算差异,x-y由于四舍五入(当舍入到最接近的可表示值时)必须为0.但是,有时人们编写这样的代码:

if (x == y)
    Handle special case.
else
    Handle normal case with some calculation involving division by x-y.
Run Code Online (Sandbox Code Playgroud)

因此,将指数模式继续到-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.

你可以看到,我们要0.11 ... 111•2 -126只是1.00后... 000•2 -126.如果它是0.11 ... 111•2 -127,则会有一个间隙 - 这是它需要的尺寸的一半.

指数1111 1111的确切值是多少?

当指数字段为1111 1111时,它不表示正常浮点格式的任何数字指数.指数字段中的该值是特殊值(无穷大和NaN)的代码.

为什么0 1111 1111 0000 0000 0000 0000 0000 000等于无穷大?

这没有数学上的原因.无穷大不是出现在有效数和指数上的任何数学上.刚刚决定指数字段1111 1111将表示无穷大和NaN,并且当有效数字段全为零时,它表示无穷大,并且当有效数字段不全为零时,它表示NaN.


Dan*_*den 5

单精度浮点数的指数偏差为 127。这意味着指数值 127 ( 1000 0000) 被评估为实际指数为零,而指数值 1 ( 0000 0001) 被评估为 -126 的实际指数。

所有零位或所有一位(0000 00001111 1111)的指数值不是实际指数,而是触发特殊情况行为。全零指数意味着尾数中没有隐含的前导一位;这用于次正规数。根据符号位和尾数位,全一指数用于标记该值是无穷大、负无穷大或NaN

为了进一步阅读,浮点指南有一个很好的解释,通俗易懂,当然,如果你真的想要细节,没有什么比Goldberg 的论文更好的了