我只是好奇,为什么在IEEE-754
任何非零浮点数除以零都会得到无限值?从数学角度来看这是无稽之谈。所以我认为此操作的正确结果是 NaN。
如果 x 是实数,则当 x=0 时,函数 f(x) = 1/x 没有定义。例如,函数 sqrt 未定义为任何负数,并且 sqrt(-1.0f) 如果IEEE-754
产生一个NaN
价值。但 1.0f/0 是Inf
.
但由于某种原因,情况并非如此IEEE-754
。这肯定是有原因的,也许是一些优化或者兼容性的原因。
那么有什么意义呢?
从数学角度来看这是无稽之谈。
是的。不,有点。
问题是:浮点数是近似值。您希望使用广泛的指数和有限的位数并获得不完全错误的结果。 :)
IEEE-754 背后的想法是每个操作都可能触发“陷阱”,从而指示可能出现的问题。他们是
- 非法(负数开方等无意义运算)
- 溢出(太大)
- 下溢(太小)
- 除以零(你不喜欢的事情)
- 不精确(此操作可能会给出错误的结果,因为您会失去精度)
现在,许多像科学家和工程师这样的人不想为编写陷阱例程而烦恼。因此,IEEE-754 的发明者 Kahan 决定,如果不存在陷阱例程,每个操作也应该返回一个合理的默认值。
They are
- NaN 表示非法值
- 溢出的符号为无穷大
- 下溢的有符号零
- NaN 表示不确定结果 (0/0),无穷大表示 (x/0 x != 0)
- Inexact 的正常运行结果
事实是,在 99% 的情况下,零是由下溢引起的,因此在 99% 的情况下
即使从数学角度来看无穷大是错误的,但在任何时候无穷大都是“正确的”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)