0xFFFFFFm走 -構文杯-
上のそのまんま続きです。
某所にて教えてもらったので、
最近はそこそこローカル変数を使っているわけですが、
…はて?本当にコスト無しなのかな??
と思ったので調べてみたり。
後、ブロックの方もアセンブラでみると
二行ほど*1書き込まれるようなので、
コチラもコストがかかるか否か検証してみたり。
……微妙(苦笑)
/*
* 基本的に上記と一緒
* 内部の計算は「除算」のものを使用し、
* ローカルの方はfor文の頭で宣言のみ、
* ブロックの方は計算する文を括ったのみ
* (丁度一段インデントを上げるだけの様な形)です。
*// : 381733.8
local: 395281.2
block: 394256
約1700万回で13〜14ms位の差…?(汗)
ということは、1回あたりだと0.00001ms(=0.01μs=10ns(笑))位??(汗)
…コストは皆無というわけでは無いけど…
「それがどうした」
という感じかなぁ…(苦笑)
最後に、おまけ(?)で
if文と(浮動小数関連の)キャスト*2の結果も。
…アレ?elseに飛んだ方が速いんですね。
/* if文
* 成功でも失敗でも変数に値を代入するだけです。
* →失敗時はelseに飛ぶようにしてあります。
*/
// true
if : 94762.2
// false -> elseへ
ifn: 59923.8
/* 浮動小数のキャスト
* 共にキャストして代入するだけです。
*/
// int -> double
id : 39393.6
// double -> int
di : 689481.6
これまた意外な。
…何だろ、余分なjump構文でも入ってるのかな?
……でも、どっちでもjump回数は変わらないと思うんだけどなぁ…。
キャストの方は噂通り
…って、整数に直すの重すぎだよ!(驚・汗)
あの「ftol2()」だか「ftoi2()」*3だかがそんなに重いのか?(汗)
…というより、小数に直すのは結構速いくせに
整数にするのは何でそんなにかかるんだ?
……まさか、pow()辺りで地道に変換とか…はしてないよね…流石に(苦笑)