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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kaiten

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

#1

投稿記事 by kaiten » 17年前

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

たかぎ

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

#2

投稿記事 by たかぎ » 17年前

完全に処理系に依存します。

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

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

box

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

#3

投稿記事 by box » 17年前

> と書くのではどちらの処理が軽いのでしょうか?
> 関数使う分下の方が重いのかと思ったのですがどうなんでしょう?

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

kaiten

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

#4

投稿記事 by kaiten » 17年前

お二人ともありがとうございます。

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

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

kaiten

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

#5

投稿記事 by kaiten » 17年前

一応報告を。
BCC Developer、VISTA、DXライブラリ使用下ではfabsを使用しない方が圧倒的に速かったです。
今後は聞く前に試すよう善処します(汗
では。

閉鎖

“C言語何でも質問掲示板” へ戻る