Let's Boostの次の文章がちょっと気になりました.
Cの標準ライブラリの clock() で実装されているようです。 コンストラクタから、あるいは restart() した時点からの 経過時間を秒単位のdoubleで得ることが出来ます。
経過時間を測る場合,clock()の他に(POSIX準拠の関数ですが)gettimeofday()という関数があります.それで,精度はどちらの方が良いのだろうと思い,少し調べてみました.
調査に使用したプログラムは次の通り.clock()版もほぼ同様のプログラムです.
#include <iostream> #include <iomanip> #include <ctime> #include <sys/time.h> int main(int argc, char* argv[]) { struct timeval tv_first, tv_last; gettimeofday(&tv_first, NULL); // dummy unsigned int a = 0; for (unsigned int i = 0; i < 10000; i++) { for (unsigned int j = 0; j < 50000; j++) a += i; } gettimeofday(&tv_last, NULL); int sec = tv_last.tv_sec - tv_first.tv_sec; int usec = tv_last.tv_usec - tv_first.tv_usec; if (usec < 0) { sec--; usec += 1000000; } std::cout << sec << '.' << std::setw(6) << std::setfill('0') << usec << std::endl; return 0; }
そして,その2つのプログラムをそれぞれ1,000回ずつ実行させて,平均値と標準偏差を出してみました.
平均 (sec) | 標準偏差 (sec) | |
clock | 0.223040 | 0.022934 |
gettimeofday | 0.224633 | 0.015967 |
平均,分散ともにほとんど差はないですが,若干clock()の方がばらつきが大きいでしょうか.ばらつきが大きいのが,正確なのか不正確なのか判断が付かないのがあれですが・・・
まぁ,どちらにしろミリ秒レベルであれば,大差はなさそうです.