为什么JavaScript中Math.pow()(有时)不等于**?

托马斯·奥特曼:

我刚刚发现ECMAScript 7功能可以a**b作为Math.pow(a,b)MDN参考的替代产品,并且在该帖子中遇到了一个讨论,在这些讨论中它们的行为显然有所不同。我已经在Chrome 55中对其进行了测试,可以确认结果是否有所不同。

Math.pow(99,99) 退货 3.697296376497263e+197

99**99 退货 3.697296376497268e+197

因此记录差异会Math.pow(99,99) - 99**99导致-5.311379928167671e+182

到目前为止,可以说这只是另一个实现,但是将其包装在函数中的行为又有所不同:

function diff(x) {
  return Math.pow(x,x) - x**x;
}

打电话diff(99)的回报0

为什么会这样呢?

正如xszaboj所指出的,可以缩小到这个问题:

var x = 99;
x**x - 99**99; // Returns -5.311379928167671e+182
乔治:

99**99在编译时评价(“常量折叠”),以及编译器的pow程序是从不同的运行时一个**在运行时进行评估时,结果与Math.pow相同,也就不足为奇了,因为**实际上是编译Math.pow调用的:

console.log(99**99);           // 3.697296376497268e+197
a = 99, b = 99;
console.log(a**b);             // 3.697296376497263e+197
console.log(Math.pow(99, 99)); // 3.697296376497263e+197

其实

99 99 = 369729637649726772657187905628805440595668764281741102430259972423552570455277523421410650010128232727940978889548326540119429996769494359451621570193644014418071060667659301384999779999159200499899

因此第一个结果是更好的近似,但常量和动态表达式之间的这种差异仍然不应该发生。

此行为看起来像是V8中的错误。报道,有望尽快修复。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Javascript

如果key是对象,为什么在JavaScript中object [key]不等于key?

来自分类Javascript

为什么JavaScript中的null大于-1,小于1,但不等于(==)等于0?那到底是什么?

来自分类Java

为什么null不等于null?

来自分类Dev

为什么NaN不等于NaN?

来自分类Dev

在Scipy中,为什么idct(dct(a))不等于a?

来自分类Dev

为什么一天不等于24小时时区设置为洛杉矶?

来自分类Dev

为什么在C中强制转换为int不等于所有双打

来自分类Dev

为什么“不等于”和类似的否定比较没有内置到球拍中?

来自分类Dev

为什么在JavaScript中undefined不等于零?

来自分类Dev

如果数组在JavaScript中是正确的,为什么不等于true?

来自分类Dev

为什么new Array()不等于[]?

来自分类Dev

为什么“ 0”不等于null

来自分类Dev

JavaScript不等于和

来自分类Dev

命题不等于什么等于什么?

来自分类Dev

为什么符号不等于符号

来自分类Dev

为什么RegExp()不等于JavaScript中显式定义的正则表达式?

来自分类Dev

当文件中的所有列不等于零时,将其与参考文件中的参考列进行比较

来自分类Dev

为什么在Python中0.1235 * 10不等于1.235?

来自分类Dev

为什么JavaScript中的“ 1.0”不等于“ +1.0”?

来自分类Dev

为什么整个空间不等于所有子分区?

来自分类Dev

为什么在使用“不等于”时,if运算符或运算符不起作用?

来自分类Dev

typeof比较不等于失败(JAVASCRIPT)

来自分类Dev

为什么此笔刷具有#00FFFFFF值不等于Brushes.Transparent?

来自分类Dev

LaTeX中的“不等于”

来自分类Dev

有人可以向我解释为什么“this”不等于以下 javascript IIFE 代码中的 win 或 window 吗?

来自分类Dev

Laravel 中什么不等于?

来自分类Dev

提示中的 Javascript“不等于”功能

来自分类Dev

为什么 a[21] 不等于 a[021]?

来自分类Dev

为什么使用十进制方法时0.2不等于0.2?

Related 相关文章

  1. 1

    如果key是对象,为什么在JavaScript中object [key]不等于key?

  2. 2

    为什么JavaScript中的null大于-1,小于1,但不等于(==)等于0?那到底是什么?

  3. 3

    为什么null不等于null?

  4. 4

    为什么NaN不等于NaN?

  5. 5

    在Scipy中,为什么idct(dct(a))不等于a?

  6. 6

    为什么一天不等于24小时时区设置为洛杉矶?

  7. 7

    为什么在C中强制转换为int不等于所有双打

  8. 8

    为什么“不等于”和类似的否定比较没有内置到球拍中?

  9. 9

    为什么在JavaScript中undefined不等于零?

  10. 10

    如果数组在JavaScript中是正确的,为什么不等于true?

  11. 11

    为什么new Array()不等于[]?

  12. 12

    为什么“ 0”不等于null

  13. 13

    JavaScript不等于和

  14. 14

    命题不等于什么等于什么?

  15. 15

    为什么符号不等于符号

  16. 16

    为什么RegExp()不等于JavaScript中显式定义的正则表达式?

  17. 17

    当文件中的所有列不等于零时,将其与参考文件中的参考列进行比较

  18. 18

    为什么在Python中0.1235 * 10不等于1.235?

  19. 19

    为什么JavaScript中的“ 1.0”不等于“ +1.0”?

  20. 20

    为什么整个空间不等于所有子分区?

  21. 21

    为什么在使用“不等于”时,if运算符或运算符不起作用?

  22. 22

    typeof比较不等于失败(JAVASCRIPT)

  23. 23

    为什么此笔刷具有#00FFFFFF值不等于Brushes.Transparent?

  24. 24

    LaTeX中的“不等于”

  25. 25

    有人可以向我解释为什么“this”不等于以下 javascript IIFE 代码中的 win 或 window 吗?

  26. 26

    Laravel 中什么不等于?

  27. 27

    提示中的 Javascript“不等于”功能

  28. 28

    为什么 a[21] 不等于 a[021]?

  29. 29

    为什么使用十进制方法时0.2不等于0.2?

热门标签

归档