为什么 IEEE 754 将 1 ^ NaN 定义为 1,为什么 Java 和 Javascript 违反了这一点?

问题描述 投票:0回答:1

IEEE 754 将 1 ^ n 定义为 1,无论 n 是多少。 (我并没有支付 106 美元来亲自证实这一点,但是这篇论文引用了 2008 年标准的第 44 页来证明这一点。)大多数编程语言似乎都遵循这个规定:Python、C、C#、PHP、Go ,Rust 对于 1 ^ NaN 都返回 1。然而,Java 和 Javascript 都返回 NaN。

  1. 为什么 IEEE 754 对 NaN 传播的一般规则创建这个例外?
  2. 为什么Java和Javascript不遵循标准?
javascript java floating-point ieee-754
1个回答
0
投票

我不是 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不遵循标准?

可能只是简单地以这种方式编码,并且最初的选择被卡住了。

也许设计者也对规格的价格感到失望,并且没有考虑这种极端情况的后果。

© www.soinside.com 2019 - 2024. All rights reserved.