0

私はC言語を使用して解決するための決定されたアルゴリズムがないプロジェクトに取り組んでいます。私はその問題を解決するためにモンテカルロ法を使用しています。そして、ユーザーが指定した実行時間に制限したいランダムな推測の数。これは、ユーザーが(コマンドライン引数として)定義した実行時間制限を最大限に活用して、できるだけ多くのランダムな反復を実行したいことを意味します。これまでに経過した実行時間をループ状態で確認できますか?

for(trials=0;execution_time<specified_time;trials++)

もしそうなら、どうすればいいですか?または、他の方法もあれば大歓迎です。ありがとうございました。

PS私はコーディングとGNUコンパイラにコードブロック10.05を使用しています。

4

3 に答える 3

2

プログラム開始以降の内部クロックティック数を返す標準関数clock()を試すことができます。詳細については、その関数のドキュメントを参照してください。

于 2011-01-16T13:54:37.273 に答える
2

はい、コンピュータに十分に細かいクロックがある場合 (実際にそうです)。

  1. シミュレーションが開始された時刻を記録します。

  2. ループを一周するたびに、現在の時刻と、開始時刻と現在の間の対応するデルタを見つけます。値が制限より大きい場合は停止します。

time()1 秒の粒度で使用する場合は、量子化の影響に注意してください。ユーザーが「1 秒」と言った場合、プログラムが T=N.999 秒で開始し、T=(N+1).001 秒で停止した場合、ほんの一瞬だけ実行される可能性があります。同じ効果はどの量子でも可能ですが、マイクロ秒とナノ秒は通常のサブ秒の粒度であるため、量子のサイズは問題になりません。

私が知っている高解像度クロック関数は次のとおりです。

  • clock_gettime() - POSIX (ナノ秒)
  • gettimeofday() - POSIX (マイクロ秒)
  • times() - Unix システム V (1 秒あたりの CLK_TCK)
  • ftime() - 古代の Unix (ミリ秒)
  • clock() - ISO C - (CLOCKS_PER_SEC)
  • time() - ISO C - (秒)
于 2011-01-16T13:58:49.993 に答える
0

コメントありがとうございます。単純な2行のコードが私のために仕事をしました:

time_t start_time = time(NULL);
while (((int)(time(NULL) - start_time)) < execution_time)
{
   /* ...... */
}
于 2011-01-18T15:05:57.100 に答える