続・C言語のdiv関数
nishさんのコメントを受け、プログラムを書き直してみました。
#include <stdlib.h> int main() { int i, sum = 0; for (i=0; i<10000000; i++) { int x, y; div_t d; x = rand()%3+3 y = rand()%3+1 d = div(x, y); sum += d.quot; sum += d.rem; } return 0; }
#include <stdlib.h> int main() { int i, sum = 0; for (i=0; i<10000000; i++) { int x, y; int q, r; x = rand()%3+3 y = rand()%3+1 q = x / y; r = x % y; sum += q; sum += r; } return 0; }
そして、計測結果
$ time ./use_div real 0m0.967s user 0m0.951s sys 0m0.020s $ time ./use_operator real 0m0.946s user 0m0.951s sys 0m0.010s
ほぼ同じ速度になりました。
けど、普通に演算子を使っても同じ速さだったらやっぱり必要なのかどうか...
(gccが最適化をがんばってるんですかね?
けど、 -O0 をつけても同じ結果でした。)
(2011/07/13 追記)
このエントリへのスパムコメントがやたらと多いので、コメント欄を閉じます。
なにかコメントがある方は別のエントリにコメントを付けて下さい。
相対的にrand()の計算コストが高いので、適切なベンチマークになっていない気がします。
rand()の結果をいったん配列に入れてから時間計測するなどの工夫が必要かと。