IEEE 754 将 1 ^ n 定义为 1,无论 n 是多少。 (我并没有支付 106 美元来亲自证实这一点,但是这篇论文引用了 2008 年标准的第 44 页来证明这一点。)大多数编程语言似乎都遵循这个规定:Python、C、C#、PHP、Go ,Rust 对于 1 ^ NaN 都返回 1。然而,Java 和 Javascript 都返回 NaN。
我不是 IEEE 754 委员会成员,但已经使用/研究该标准数十年了。
即使有道理,作为一个观点,当然这个不具有权威性。
为什么 IEEE 754 对 NaN 传播的一般规则创建这个例外?
考虑 IEEE 754 将 00 定义为 1.0,而 0.0、1.0、无穷大、未定义等都是数学候选值。 根本不存在通用的数学结果,但对于计算结果,返回 1 可以满足大多数计算用途。
IMO,这适用于此,但更是如此。 NaN 的想法代表了一些非确定性符号和幅度(可能是无限的)实部和虚部的量
x
。 在 all 的情况下,1x 结果为 1.0。 因此,即使有 NaN
,1.0 的结果至少是合理的。
为什么Java和Javascript不遵循标准?
可能只是简单地以这种方式编码,并且最初的选择被卡住了。
也许设计者也对规格的价格感到失望,并且没有考虑这种极端情况的后果。