我很好奇,为什么在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/