- 締切済み
なんで一瞬で処理が終わるの?
時間を計測するプログラムを書いたのですが、何故か一瞬で処理が終わってしまいます。 #include <stdio.h> #include <time.h> int main(void){ int i,j,a,b=1; clock_t t; t=clock(); for(i=0;i<1000000000;i++){ for(j=0;j<10000000;j++){ a=b; } } printf("%.3f秒\n",(clock()-t)/1000.0); printf("%f %f",clock(),t); return 0; } 実行結果 0.000秒 0.000000 0.000000 なんで0なんでしょうか・・。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- Werner
- ベストアンサー率53% (395/735)
> printf("%.3f秒\n",(clock()-t)/1000.0); clockの返り値を秒に直すには、 1000ではなく、CLOCKS_PER_SECで割るようにしましょう。 (たいていCLOCKS_PER_SEC==1000なので1000でもうまくいくことが多いですが。) http://www9.plala.or.jp/sgwr-t/lib/clock.html > printf("%f %f",clock(),t); clock()の返り値は整数なので%fではうまく表示できないと思います。 なお、提示のプログラムは最適化なしだといつまで経っても終わりませんでした。 (内側のforループを削除したら数秒になった。)
- joqr
- ベストアンサー率18% (742/4026)
理由は a=b;を何度繰り返しても結果は変わらないので、コンパイラーは、a=b;を1度しか実行しないコードとして解釈しています これを最適化と言います a=rand();とすれば結果は違ってきます aに代入される数値は乱数の為、毎回異なる値になります。この為、a=b;の用に最適化することができないためです
- Oh-Orange
- ベストアンサー率63% (854/1345)
★宣言部に『volatile』を付けてコンパイルし直してください。 ・『volatile int i,j,a,b=1;』として最適化を阻止してみて下さい。 これで駄目なときは、オプションで最適化をしないようにしてからコンパイルし直して下さい。 ・以上。
- rabbit_cat
- ベストアンサー率40% (829/2062)
コンパイラが気を利かせて、無駄(に見える)処理を削除したのでしょう。