FizzBuzz関数処理時間計測クラスの問題点
常に同じ条件で関数を実行するというのは難しい。
前回こんなクラスを書いたけど、実行の仕方で結果が微妙に違うみたい。
int main(void){ const unsigned int N = 999999; const unsigned int TIMES = 100; cout << TIMECHECK_N(FizzBuzz1, N, TIMES) << endl; cout << TIMECHECK_N(FizzBuzz2, N, TIMES) << endl; cout << TIMECHECK_N(FizzBuzz3, N, TIMES) << endl; cout << TIMECHECK_N(FizzBuzz4, N, TIMES) << endl; cout << TIMECHECK_N(FizzBuzz5, N, TIMES) << endl; return 0; }
int main(void){ const unsigned int N = 999999; const unsigned int TIMES = 100; cout << TIMECHECK_N(FizzBuzz1, N, TIMES) << "\n" << TIMECHECK_N(FizzBuzz2, N, TIMES) << "\n" << TIMECHECK_N(FizzBuzz3, N, TIMES) << "\n" << TIMECHECK_N(FizzBuzz4, N, TIMES) << "\n" << TIMECHECK_N(FizzBuzz5, N, TIMES) << endl; return 0; }
上の二つの記述法で計測をすると、一方で早かったものが他方では遅かったり、平均的に速くても、極端に遅い記録が混じったり。
これは計測対象の関数の特性にもよるだろうけど、常に同じ条件で計測することの難しさを感じました。もう何が正確のなのやら、とわからなくなってくる。