for文のループ方法について

まとめサイトを巡ってたら気になるコメントがあったので試してみたメモ。

http://blog.livedoor.jp/itsoku/archives/41660022.html

このコメント73の「デクリメントのほうが演算コストが云々・・・」の部分。
このあとすぐに「マシン語レベルだと変わらない」と判断されてたけど、実際どうなのか確かめてみようかと。
コンパイルとかも面倒だったんでとりあえずnode.jsで。

var MAX = 100000000;

var start = new Date().getTime();
for(var i = 0; i < MAX; i++){} // (1)
var end = new Date().getTime();
console.log("for(var i = 0; i < MAX; i++){} : " + (end - start) + "(msec)");

var start = new Date().getTime();
for(var i = MAX; i; i--){} // (2)
var end = new Date().getTime();
console.log("for(var i = MAX; i; i--){} : " + (end - start) + "(msec)");

やってみた結果、前者は96msくらいで、後者が126msくらい。
後者のほうが若干遅くなる模様。

他の言語でやってみた場合どうなるか気になるなあ。


11/03 00:03追記

C言語で同様のコードを試してみたら(1)が230ms、(2)が210msだった。
i < MAXの比較処理分の差が出たのかなあ。