この会社辞めようと思ったソースコード

このエントリーをはてなブックマークに追加
866仕様書書かないさん
ちょっと間違い。
15回のループがある場合、i==0で抜けるとi==0の時実行されないので、
16〜1の間で処理することになり、使いにくい。

>>865
変数にはゼロフラグがあり、ゼロであるかを調べるのは高速です。
また、負であるかどうかも、1ビットを調べるだけなので高速です。
しかし、正の整数であるかはどうやって調べるでしょう?

分岐の問題については、
例えば、i < 15 を評価する場合、i - 15 の結果が負であるかどうかを調べます。
右辺が0の場合には計算をしないとしても、
i >= 0 の評価では、0であるかを調べ、さらに0より大きいかをしらべます。
パイプラインでは同時にいくつもの命令を並行して演算しますが、分岐がある場合は確率的に高い結果が出るものとして演算を続けます。
もし分岐して予測が外れた場合、演算は無駄になり、分岐処理がパイプラインから抜けてから次の演算を続けることになります。
最新のCPUではどうか知りませんが、数年前までのCPUでは予測がヒットする確率が高いのは1つの分岐のときです。
パイプラインはCPUの高速化のための技術ですが、予測が外れやすいコーディングではその恩恵を受けられません。
演算結果が0であれば抜け、正であれば抜けるような処理をするよりは、
演算結果が負であれば抜け、それ以外は続行した方が効率がいいのは明らかです。