我很好奇,为什么在IEEE-754中任何非零浮点数除以零都会得到无穷大值?从数学的角度来看这是胡说八道。因此,我认为此操作的正确结果是NaN。

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

但是由于某些原因,IEEE-754中的情况并非如此。一定有一个原因,也许是一些优化或兼容性的原因。

那有什么意义呢?

最佳答案

从数学的角度来看这是胡说八道。


是。不会的

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

IEEE-754背后的思想是,每个操作都可能触发“陷阱”,表明可能存在问题。他们是


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


现在,许多人(例如科学家和工程师)不想被编写陷阱例程所困扰。因此,IEEE-754的发明者Kahan决定,如果不存在陷阱例程,则每个操作也应返回合理的默认值。

他们是


NaN用于非法值
签署的无穷大
下溢签署零
NaN用于不确定的结果(0/0)和无穷大(x / 0 x!= 0)
不精确的正常运行结果


事实是,在所有情况的99%中,零是由下溢引起的,因此在99%
从数学角度来看,即使无限,Infinity始终是“正确的”。

关于language-agnostic - 为什么在IEEE754标准中被零除会导致无穷大?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32605145/

10-11 04:04