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の比較処理分の差が出たのかなあ。