在JavaScript中对数字进行平方的最快方法是什么?

Bar*_*ies 16 javascript

在JavaScript中对数字进行平方的最快方法是什么?

function squareIt(number) {
   return Math.pow(number,2);
}

function squareIt(number) {
   return number * number;
}
Run Code Online (Sandbox Code Playgroud)

或者其他一些我不知道的方法.我不是在寻找一个高尔夫球的答案,但平均而言,编译器的答案可能是最短的.

编辑:我看到为什么比乘以两个随机数快一个数字?这似乎表明平方比两个随机数乘以更快,并假设n*n不会利用这个,但Math.pow(n,2)会.正如jfriend00在评论中所指出的,然后在回答中,http: //jsperf.com/math-pow-vs-simple-multiplication/10 似乎表明直接乘法在除了Firefox之外的所有内容中都比较快同样很快).

jfr*_*d00 54

所有性能问题都应该通过测量来回答,因为浏览器实现的细节和您关心的特定场景通常决定了结果(因此理论上的讨论并不总是正确的).

在这种情况下,浏览器实现性能差别很大.以下是此jsperf测试中许多不同浏览器的结果:http://jsperf.com/math-pow-vs-simple-multiplication/10 ,它比较:

Math.pow(x1, 2)
x1 * x1
Run Code Online (Sandbox Code Playgroud)

更长的条形更快(更高的操作/秒).您可以看到Firefox优化两个操作几乎相同.在其他浏览器中,乘法明显更快.IE是最慢的,并显示两种方法之间最大的百分比差异.Firefox是最快的,显示两者之间的差异最小.

在此输入图像描述

  • 啊,我刚注意到"越高越好".我认为条的长度与操作完成所花费的平均时间长度相对应.@ jfriend00,我无法提供答案,因为我没有足够的代表,我只能将此标记为已接受的答案. (3认同)
  • 您还应该尝试“**”运算符 (2认同)

Pen*_*Liu 18

ES6中,可以使用指数 n(x ** y)执行以下操作,该结果与Math.pow(x,y)以下结果相同:

function squareIt(number) {
  return number ** 2;
}

console.log(squareIt(5));
Run Code Online (Sandbox Code Playgroud)

或者您可以使用一个名为BigInteger.js的JavaScript库。

alert(bigInt(5).square());
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/big-integer/1.6.40/BigInteger.min.js"></script>
Run Code Online (Sandbox Code Playgroud)