- ベストアンサー
clock関数での経過時間計測
clock関数でプログラムの時間を計測しようと思っているのですがうまくいきません。 ----------------------------- clock_t start,end; start = clock(); (処理) end = clock(); printf("かかった時間:%f",(double)(end-start)/CLOCKS_PER_SEC); ----------------------------- 上のようにしているのですが、実行結果は0.00000秒と出てしまいます。処理のところは足し算を何題か出題し解答を入力し正解したら次の問題というようなことをしています。 確認のためstartにclock()を代入した後とendに代入したあとでprintfでstartとendを出力してみましたが、どちらの値も10.00000で同じ値となっています。0秒になるのはこれのせいだと思うのですが、どうして同じ値になるのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>どうして同じ値になるのでしょうか? (処理)が、clock()値に対して速すぎるからだと思います。 clock()での区間計測は、一般に低精度です。 WinならQueryPerformanceCounter()を使ってみて下さい。それ以外の環境でかつIA32なら、RDTSC命令が有効です。
その他の回答 (1)
- jacta
- ベストアンサー率26% (845/3158)
処理系等にも依存しますが、clock関数の分解能に比べて、処理が短すぎることが原因かと思います。 clock_tの精度と実際の分解能は必ずしも一致していません。例えば、clock_tが1msec単位であったとしても、実際の分解能が50msecしかない場合もあるわけです。 分解能の悪さに対する対策としては、同じ処理を1000回とか10000回とか繰り返して、その時間を計測するのが常套手段ですが、繰返しができないようなものや、高い計測精度を必要とする場合は、別の方法を検討するしかありません。
お礼
QueryPerformanceCounter()を使ったらうまくいったのでそちらの方法を使ってみることにします。ありがとうございました。