<集大成>アルゴリズム大辞典
at TECH
149:デフォルトの名無しさん
05/10/28 07:31:16
2の補数表現でも1の補数でも if (x < 0) x = 0; という演算なら問題ない。
つまり >>147の前半の突っ込みは無駄ではなくて、無知なツッコミ。
後半もちょっと変
if (x < 0) x = 0; は表現であって、実際に分岐を指示しているわけではない。
この計算は賢いコンパイラなら
最近のX86に対応しているなら 条件付代入命令に変換される可能性が高い
CMP
CMOVS
となる。
ちなみに、浮動小数点命令にも条件付代入命令はある
さて、分岐と演算命令のどちらが高速という話なら、
分岐命令は並列演算の妨げとなるが
演算命令は並列化可能な部分は並列化される故に
命令数が多少多くても現在でも分岐より演算が速く、将来はもっと高速になる可能性が大
並列処理のことを言わず、一昔前のCPUや現在のH8やSHでは
分岐命令は演算命令2〜4つ分のコストを支払わされるのが普通
なお、この部分 x := x and (not (x asr 31) ) も 条件代入も並列化出来ないが
その次に同じような演算があれば先読み実行される可能性があるという事
次ページ続きを表示1を表示最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4390日前に更新/131 KB
担当:undef