指数运算符 ^ 和 Math.pow() 之间的区别
Posted
技术标签:
【中文标题】指数运算符 ^ 和 Math.pow() 之间的区别【英文标题】:Difference between Exponent operator ^ and Math.pow() 【发布时间】:2018-07-26 14:11:01 【问题描述】:有什么区别:
100 ^ 49; // = 85
和
Math.pow(100, 49); // = 1e+98
javascript 返回不同的结果,我不知道为什么。
【问题讨论】:
指数运算符是**
,100**49
。
【参考方案1】:
^
不是 JavaScript 中的求幂运算符,**
是(而且只是最近)。 ^
是按位异或。更多关于 JavaScript 操作符on MDN.
如果比较100**49
和Math.pow(100,49)
,按照规范,应该没有区别;来自Math.pow
:
返回使用 12.6.4 中指定的 base 和 exponent 应用 ** 运算符的结果。
不过,目前的实现可能是这样,也可能不是,因为求幂运算符还是很新的。例如,在我写这篇文章的时候,Chrome 的 V8 JavaScript 引擎为 100**49
和 Math.pow(100,49)
返回非常略有不同的结果:(编辑:截至 2020 年 8 月 26 日,他们有结果相同。)
console.log(100**49);
console.log(Math.pow(100,49));
据推测,随着实施的成熟,差异将得到解决。 this issue 似乎涵盖了差异。 100*49
似乎是在编译时评估的(因为两个值都是常量),而 Math.pow
当然是在运行时评估的,显然算法并不相同。
如果您使用变量,**
和 Math.pow
同意:
let a = 100;
console.log(a**49);
console.log(Math.pow(a,49));
console.log(a**49 === Math.pow(a, 49));
在 Firefox 和 Edge 上,这些值是相同的(即使是常量)。
【讨论】:
以上是关于指数运算符 ^ 和 Math.pow() 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript中计算N次方的方法**和math.pow()-讲解
为啥 numpy.power 为小指数返回 0 而 math.pow 返回正确答案?