[C] if文は使いたくないけど使う。

だって遅いんすよ。

C言語やfortranに限らず、if文は遅いことが知られています。どのようなアルゴリズムで動いているかは私の知るところではありませんが、forループの中にあるようなif文は見易さやチューニングのしやすさを損なわない範囲で取り除くようにしましょう。

しかしここには罠があります。if文を取り除く代わりに何か別の関数を呼び出す場合は注意が必要です。

ここではmin(a, b)関数をifを使ったもの・使ってないもの2通りを作って、実行時間を測定してみました。ちなみにifを使わないで二つの値を比べて値を吐き出すプログラムは

min(a, b)=0.5*(a+b-|a-b|)

です。つまり、ifを取り除いた代わりにfabsを使って絶対値を求めています。

 

 

結果は no if time=6.078705, if time=4.920436 でした。つまりif文を使ったほうが速かったのです。これはfabs関数を呼び出すほうが時間がかかることを示しています。

if文を無くしたことでコードが読みにくくなるどころか、速度まで遅くなってしまいました…

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Captcha loading...