続2・C言語のdiv関数
odzさんのコメントを受け、さらに改造。
#include <stdlib.h> #include <time.h> #define N 10000000 static int xs[N], ys[N]; int main() { int i, sum = 0; srand(time(NULL)); for (i=0; i<N; i++) { xs[i]= rand()%3+3; ys[i] = rand()%3+1; } for (i=0; i<N; i++) { #ifdef OPERATOR int q, r; q = xs[i] / ys[i]; r = xs[i] % ys[i]; sum += q; sum += r; #endif #ifdef DIV div_t d; d = div(xs[i], ys[i]); sum += d.quot; sum += d.rem; #endif } return 0; }
そして計測
$ gcc test.c # 計算を行わない $ time ./a real 0m0.789s user 0m0.751s sys 0m0.040s $ gcc -DDIV test.c # div関数を使用 $ time ./a real 0m0.983s user 0m0.941s (差分: 0.190s) sys 0m0.040s $ gcc -DOPERATOR test.c # 演算子を使用 $ time ./a real 0m0.933s user 0m0.911s (差分: 0.160s) sys 0m0.030s
divの方が遅い。けど、あんまり差が出てない気もします。
「-O0」オプションをつけても結果はそれほど変わらなかったけど、
「-O5」オプションを付けてみたら両者の差は大きくなりました。
(2011/07/13 追記)
このエントリへのスパムコメントがやたらと多いので、コメント欄を閉じます。
なにかコメントがある方は別のエントリにコメントを付けて下さい。