为什么IEEE754标准中的除零导致无限值?

Evg*_*zin 41 language-agnostic floating-point ieee-754

我只是好奇,为什么在IEEE-754任何非零浮点数除以零时会产生无穷大的值?从数学角度来看,这是无稽之谈.所以我认为这个操作的正确结果是NaN.

如果x是实数,则当x = 0时,不定义函数f(x)= 1/x.例如,如果IEEE-754生成NaN值,则不为任何负数定义函数sqrt,并为sqrt(-1.0f)定义函数sqrt .但1.0f/0是Inf.

但由于某些原因,事实并非如此IEEE-754.必须有一个原因,可能是一些优化或兼容性原因.

那有什么意义呢?

Tho*_* S. 57

从数学角度来看,这是无稽之谈.

是.没有.排序.

问题是:浮点数是近似值.您希望使用各种指数和有限数量的数字,并获得并非完全错误的结果.:)

IEEE-754背后的想法是每个操作都可以触发指示可能出现的问题的"陷阱".他们是

  • 非法(无意义的操作,如负数的sqrt)
  • 溢出(太大)
  • 下溢(太小)
  • 除零(你不喜欢的东西)
  • 不精确(此操作可能会给您错误的结果,因为您正在失去精度)

现在,许多像科学家和工程师一样的人不想为编写陷阱例程而烦恼.因此,IEEE-754的发明者Kahan决定,如果不存在陷阱例程,每个操作也应返回合理的默认值.

他们是

  • NaN的非法价值观
  • 已签署无限期溢出
  • 为Underflow签名的零
  • NaN表示不确定结果(0/0)和无穷大(x/0 x!= 0)
  • 不精确的正常运算结果

事实上,在99%的情况下,零是由下溢引起的,因此在99%的情况下,即使从数学角度来看错误,Infinity也是"正确的".

  • 如果字面零,以及正下溢,负下溢和不可区分值的减法的结果都是不同的,那么数值"敏感性"的水平可以得到改善,但是添加这样的"零"的其他形式将具有复杂的浮动 - 点硬件.IEEE标准将上述内容合并为两种形式的零,这导致一些应该是NaN的东西变成+ INF.我怀疑理由是除以+/-零收益+/- INF而不是NaN不会增加太多硬件,偶尔会有用. (8认同)
  • 最后一句对我来说听起来非常务实. (4认同)

pax*_*blo 9

我不确定你为什么认为这是胡说八道.

简单的定义a / b,至少对于非零b,是在达到零之前必须从中b减去的唯一s 数a.

将其扩展到b可以为零的情况,必须从任何非零数字中减去以得到零的数字确实是无限的,因为你永远不会得到零.

另一种看待它的方法是谈谈限制.当正数n接近零时,表达式1 / n接近"无穷大".你会注意到我引用了这个词,因为我坚信不会传播无限的妄想实际上是一个具体的数字:-)

NaN 保留用于无法用任何其他值(包括无穷大)表示(甚至近似)数字的情况,它被认为与所有其他值不同.

例如,0 / 0(使用我们上面的简单定义)可以减去任何数量的bs a以达到0.因此结果是不确定的 - 它可以是1,7,42,3.14159或任何其他值.

类似地,诸如负数的平方根之类的东西,在IEEE754使用的实际平面中没有值(你必须转向复平面),无法表示.

  • @Lazin,虽然这很幽默,但实际上并没有这样做,因为"无限"这个概念意味着"超越数字",它本身并不是一个数字.所以,虽然1/0为你提供了超出数字的东西,但是无限数量的零将永远为0.现在我的脑袋即将爆炸,因为我很久以前忘记的所有那些超限垃圾都在淹没我的头盖骨 - 我必须发票你从键盘上移除血腥和脑部物质:-) (10认同)
  • "必须从任何非零数字中减去0才能达到零的数量确实是无限的." - 不,因为在无限多次零减法后你/静止/没有变为零. (3认同)
  • 另一方面,如果1/0是Inf,则Inf * 0必须等于1,但事实并非如此:) (2认同)
  • @paxdiablo无穷大是否是算术系统的一部分完全取决于该系统的定义方式.考虑投影和扩展实线算术. (2认同)

小智 6

在数学中,除零是未定义的,因为零没有符号,因此两个结果同样可能,并且排除:负无穷大或正无穷大(但不是两者).

在(大多数)计算中,0.0有一个符号.因此,我们知道我们接近的方向,以及无限的标志.当0.0表示非零值太小而不能由系统表示时尤其如此,因为通常情况如此.

NaN唯一合适的时间是系统是否确切地知道分母是真的,恰好为零.除非有一种特殊的方式来指定它,否则它不会增加开销.