Javascript中使数字为负数的最便宜方法

Javascript中使数字为负数的最便宜方法,javascript,optimization,negative-number,Javascript,Optimization,Negative Number,我正在优化我用javascript制作的物理引擎。我一直在读一些关于操作成本相对于cpu使用的文章,但是我找不到这个问题的答案。 我想做出一个“否定的回答。我想出了两种不同的解决方案: a *= -1; 或 其中哪一种是最快的?我已经读到乘法是便宜的,但是这些方法中哪一种是最好的?似乎过于优化了 我会选第二个,因为它很短 a*=-1; //5 a=-a; //4 我做了一个小测试。结果:没关系 <!DOCTYPE HTML> <html> <body>

我正在优化我用javascript制作的物理引擎。我一直在读一些关于操作成本相对于cpu使用的文章,但是我找不到这个问题的答案。 我想做出一个“否定的回答。我想出了两种不同的解决方案:

a *= -1;


其中哪一种是最快的?我已经读到乘法是便宜的,但是这些方法中哪一种是最好的?

似乎过于优化了

我会选第二个,因为它很短

a*=-1; //5
a=-a;  //4

我做了一个小测试。结果:没关系

<!DOCTYPE HTML>
<html>
<body>
  <script>
    var a = 123.21; 
    var start = new Date().getTime(); // time in milliseconds
    for(var i = 0; i < 1000000000;  i++) {
        //a = -a;    
        // results into time needed: 2002 ms when a is integer, 3505 ms when a is floating point
        a *= -1; 
        // results into time needed: 1992 ms when a is integer, 3671 ms when a is floating point
    }
    var end = new Date().getTime();
    var time = end - start;
    alert("time needed: "+time);
  </script>
</body>
</html>

var a=123.21;
var start=new Date().getTime();//以毫秒为单位的时间
对于(变量i=0;i<100000000;i++){
//a=-a;
//结果转换为所需时间:a为整数时为2002毫秒,a为浮点时为3505毫秒
a*=-1;
//结果转换为所需时间:a为整数时为1992毫秒,a为浮点时为3671毫秒
}
var end=new Date().getTime();
var时间=结束-开始;
警报(“所需时间:+时间”);
无需猜测:回答它


根据Chrome中的这个测试,差异是无法区分的。

很确定这是过度优化。你确定这是你代码的瓶颈吗?也就是说,大部分cpu时间都花在哪里了?另外,我猜最后一个,因为解析器读取的字符少了一个,我认为这与y的时间相当您将在此处“保存”。它们都使用乘法a*=-1;//a*(-1)------a=-a;//(-1)*a它们只是相同的,
a=-a
避免乘法。这更像是
a=0-a
@FilipHaglund,代码是每帧运行n^2倍于n个相互重叠的对象,因此在某些情况下,代码会执行很多次。但也许你是对的,这是过度优化,但我认为是这样很高兴知道。至少我从中了解到我过度优化了。你检查了哪个版本的浏览器?显示的结果是针对Chrome v 36的,但我也检查了IE 9。对于这两种浏览器,时间是相似的(但在IE中要慢得多).lol!我第一次检查了3次
-下一次a
会更快,两者相等,第三次..你知道;)正如我的帖子所说:在Chrome中,它是无法区分的。我的回答意味着为了获得正确的结果,你必须在其他浏览器上进行测试。我的回答并不意味着不同的方法在每个浏览器中都会工作相同。;)我是在Ubento中也使用chrome
<!DOCTYPE HTML>
<html>
<body>
  <script>
    var a = 123.21; 
    var start = new Date().getTime(); // time in milliseconds
    for(var i = 0; i < 1000000000;  i++) {
        //a = -a;    
        // results into time needed: 2002 ms when a is integer, 3505 ms when a is floating point
        a *= -1; 
        // results into time needed: 1992 ms when a is integer, 3671 ms when a is floating point
    }
    var end = new Date().getTime();
    var time = end - start;
    alert("time needed: "+time);
  </script>
</body>
</html>