前提・実現したいこと
現在私が利用しているコードは乱数に依存するので実行時間にばらつきがあるので,プログラムを5回,10回,n回と実行したときの平均処理時間や処理時間の標準偏差を求めたいです.
chronoを使ったコード実行時間算出機能を使っているのですが,実行するごとに処理時間のメモを取って一定回数実行後に手動で計算しているのは何とも手間がかかるので,プログラム内で一括で連続実行して計算まで終わらせることができないものかと考えています.
例えば以下のようなプログラムがあったとして,n回測定して平均と分散(又は標準偏差)を出力する方法はございますでしょうか?
厳密に言えばヘッダーをincludeする時間とかmain関数を起動する時間とかその他複雑なのがあるのかもしれませんが,そういうのがあったとしても特に無視してあくまでmain関数の内部の処理だけを繰り返していただければ結構です.
.
現在使っているコードを公開できないので以下は今回の質問のために書いたサンプルコードですが,内容としては「0から1の範囲でメルセンヌツイスター法で乱数を生成して1以上になるまで0.0000000001を足してやろう」みたいな感じです.
これなら連続測定でそれなりに処理時間に差が出るんじゃないかと思います.
もしうまい方法がございましたらこれにどう付け足していけばいいか教えてください.
該当のソースコード
c++
1#include <random> 2#include <iostream> 3#include <chrono> 4using namespace std; 5 6 7uint64_t get_rand() { 8 static std::mt19937_64 mt64(0); 9 return mt64(); 10} 11uint64_t get_rand_range(uint64_t min_val, uint64_t max_val) { 12 static std::mt19937_64 mt64(0); 13 std::uniform_int_distribution<uint64_t> get_rand_uni_int(min_val, max_val); 14 return get_rand_uni_int(mt64); 15} 16std::uniform_real_distribution<double> get_rand_uni_real(0.0, 1.0); 17 18int main(int argc, char *argv[]){ 19 20random_device seed_gen; 21 mt19937_64 engine(seed_gen()); 22 23double a=get_rand_uni_real(engine); 24 25while(a<1){ 26a+=0.0000000001; 27} 28 29} 30
補足情報(FW/ツールのバージョンなど)
g++などのコンパイラは最新のものにアップデート済みです.
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/20 13:26
2020/09/20 13:58
2020/09/21 02:43