为什么0的乘法倒数会导致无穷大?

我正在用 Swift 编写一个程序,它采用随机字节的乘法倒数。有时,字节为 0,当取乘法逆时,结果为inf

乘法倒数正在确定使用

powf(Float(byte), -1.0)

byte是 类型UInt8。如果byte等于 0,则结​​果inf如前所述。0 的乘法倒数怎么会是无穷大?因为0/0的乘法逆是 ,所以乘法逆也不是 00/0吗?

回答

简短回答:根据定义。在 Swift(和许多其他语言)中,浮点数由IEEE-754浮点定义支持,在大多数情况下由底层硬件直接实现,因此速度非常快。根据该标准,浮点数除以 0 被定义为Infinity,而 Swift 只是将该结果返回给您。(确切地说,0/0定义为NaN,任何正数除以0定义为Infinity,任何负数除以0定义为-Infinity。)

一个有趣的问题可能是“为什么?” 为什么 IEEE-754 将除以 0 定义Infinity为浮点数,在这种情况下,人们也可以合理地期望机器抛出错误,或者将其定义为NaN(非数字),甚至可能是 0?要对此进行分析,您应该真正阅读 Kahan(IEEE-754 背后的语义设计者)自己关于此事的注释。从链接文档的第 10 页开始,他讨论了为什么选择Infinity被零除更可取,这基本上归结为数值算法的有效实现,因为该约定允许在迭代数值分析中跳过昂贵的测试。从第 10 页开始阅读,并仔细阅读他讨论的示例,这些示例在第 14 页的顶部结束。

总结一下:浮点除以 0 是Infinity由 IEEE-754 标准定义的,做出这个选择是有充分理由的。当然,人们可以想象不同的系统也采用不同的答案,这取决于它们的特定需求或应用领域;但是它们将不符合 IEEE-754 标准。


以上是为什么0的乘法倒数会导致无穷大?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>