在IEEE 754-2008部分“9.2.1 特殊值”中提到
pow(+1, y)
适用1
于任何y
(甚至是安静的NaN
)
对于不阅读整个文档 Wikipedia 提供了快捷方式:
IEEE 754 标准的 2008 版本表示
pow(1, qNaN)
并且pow(qNaN, 0)
都应该返回1
,因为它们返回1
使用的任何其他内容而不是 quietNaN
。
Math.pow(1, NaN)
那么为什么NaN
在 JavaScript 中呢?不符合标准吗?
在IEEE 754-2008部分“9.2.1 特殊值”中提到
pow(+1, y)
适用1
于任何y
(甚至是安静的NaN
)
对于不阅读整个文档 Wikipedia 提供了快捷方式:
IEEE 754 标准的 2008 版本表示
pow(1, qNaN)
并且pow(qNaN, 0)
都应该返回1
,因为它们返回1
使用的任何其他内容而不是 quietNaN
。
Math.pow(1, NaN)
那么为什么NaN
在 JavaScript 中呢?不符合标准吗?
这是因为ECMAscript 规范似乎是这么说的。
pow (x, y)
返回
x
对乘方结果的依赖于实现的近似值y
。
- 如果
y
是NaN
,结果是NaN
。- ...其他限制...
根据Wikipedia 文章,该pow
定义于 2008 年添加到 IEEE 754。它也是可选的。
另一方面,如果第二个参数至少是从 1997 年开始,则 ECMAScriptpow
已被定义为返回,该年标准的第 15.8.2.13 节。NaN
NaN
似乎 ECMA 委员会选择保持与十多年的 JavaScript 的兼容性,而不是遵守 IEEE 的特殊新建议。
这是因为 NaN 是“非数字”,某种数学上的未定义。在数学 1 中,未定义的幂也是未定义的。