ページ 11

絶対値を使う場合はどっちが軽い?

Posted: 2008年8月13日(水) 21:37
by kaiten
条件分岐の時、
変数x,x2,rが存在するとして、
if((x2-x<r)||(x2-x>(-r)))
   {
   //処理
   }
と書くのと
if(fabs(x2-x)<r)
   {
   //処理
   }
と書くのではどちらの処理が軽いのでしょうか?
関数使う分下の方が重いのかと思ったのですがどうなんでしょう?

Re:絶対値を使う場合はどっちが軽い?

Posted: 2008年8月13日(水) 22:11
by たかぎ
完全に処理系に依存します。

例えば、x, x2, rが実浮動小数点数の場合、FPUがない、または浮動小数点演算をソフトエミュレートする処理系であれば、それほど変わらないかもしれません。

また、FPUがある環境であっても、fabsが組み込み関数として実装されているような処理系であれば、演算回数および短絡評価のための条件分岐を考えると後者の方が高速になります。

Re:絶対値を使う場合はどっちが軽い?

Posted: 2008年8月13日(水) 22:19
by box
> と書くのではどちらの処理が軽いのでしょうか?
> 関数使う分下の方が重いのかと思ったのですがどうなんでしょう?

私だったら、各々の処理を1億回くらい繰り返すような
テストコードを書いて確かめます。

Re:絶対値を使う場合はどっちが軽い?

Posted: 2008年8月13日(水) 22:45
by kaiten
お二人ともありがとうございます。

>たかぎさん
処理系に依存だったんですか。同じものかと思い環境を書いてませんでした。

>boxさん
ごもっともです。1億回分のコード書いて確かめてみます。

Re:絶対値を使う場合はどっちが軽い?

Posted: 2008年8月13日(水) 23:14
by kaiten
一応報告を。
BCC Developer、VISTA、DXライブラリ使用下ではfabsを使用しない方が圧倒的に速かったです。
今後は聞く前に試すよう善処します(汗
では。