![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
Cでモンテカルロシミュレーションを行っています。
乱数Merssenne twisterをつかって、各試行ごとに乱数を
時間で以下のように初期化しています。
init_genrand ((unsigned)time(NULL)) ;
だいたい10000~100000回くらいシミュレーションを行う必要があって、
各試行は使用しているPCだと一瞬で終了します。
このときに上記の方法で種を初期化すると、
きちんと確認はしていないのですが、
試行時間が短すぎで種の時間が進んでいないような状態が起こります。
パソコンの時間で初期化する場合、間隔が短すぎると初期化種がかぶる
ことはありますか。
もしあるなら、1回の試行時間が短いシミュレーションを各々初期化できる
ような初期化の方法を教えていただけないでしょうか。
環境はcore2duo2.16、vista32、コンパイラはVisualC++2008です。
よろしくお願いします。
No.5ベストアンサー
- 回答日時:
連続投稿ですみません。
もしかして、試行ごとに別のプロセスを起こしているのでしょうか?
状況次第ですが、根本的にやり方に問題があるような気がします。
この回答への補足
回答ありがとうございました。
別のプロセスではなく、初期値以外は同じプロセスです。
種の種を時間で初期化して使うというのは参考になりました。
やるうえで問題はあるのでしょうか。
お返事が遅くなって申し訳ありません。
恥ずかしながら大きな勘違いをしていて、
自分が行っていたのは同じプロセス内で変数を初期化しようと
いう意味のないことをしようとしていました。
アドバイスは参考にさせていただきます。
ありがとうございました。
No.3
- 回答日時:
Mersenne twisterの内部状態を適当なファイルにでも保存しておいて
2回目以降はその状態を引き継いで使えば良いのでは。
> time関数の結果をsrandに与えて、randで得た値
time関数の戻り値が同じならそうやってrandで得られる値だって同じじゃないの?
No.1
- 回答日時:
time()は「秒単位の時間を得る」ので、一瞬で終わってしまうような処理をループで回す場合は全て同じ種になる(秒単位の時間が変わらないので)可能性が高いでしょう。
_ftime()でミリ秒単位の時間が取れるので、そちらを利用するのがよいのではないかと。
http://msdn.microsoft.com/ja-jp/library/z54t9z5f …
回答ありがとうございました。
検索するとgetTimeGet関数というのがWindows環境で
つかえたので、それを用いて解決しました。_ftime()関数は
もっとユニバーサルなCの標準的な関数なのでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- ノートパソコン パソコンが壊れる原因とは... 7 2022/07/17 15:19
- iPhone(アイフォーン) iPhoneに詳しい方に質問です! Appleのパスワードを忘れてしまって強制初期化をしたいのですが 1 2023/01/31 22:09
- Android(アンドロイド) Androidスマホを使っていますが、最近急に電源が落ち、その後Androidシステムが読み込めない 5 2023/06/02 10:32
- iPhone(アイフォーン) iPhone8→iPhone14のデータ移行(gmail)について iPhone8からiPhone1 2 2023/05/09 23:26
- ノートパソコン 初期化する方法を教えて欲しい。 2 2023/01/06 14:49
- バックアップ 外付けHDDが認識されません 3 2023/03/07 17:11
- モニター・ディスプレイ PCゲームで急にFPSが落ちました 2 2022/11/18 00:42
- その他(OS) 初期化をしたらログインできなくなりました 1 2022/05/30 18:59
- JavaScript 変数宣言と初期値代入の場所について 3 2022/10/31 19:09
- システム 外付けHDDの初期化について 4 2023/03/05 20:00
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 exitの使い方
-
フォームを開くときに、コンボ...
-
[return]の役割について
-
Excel-vba 文字列と変数を...
-
1つ前の値を変数に保存する方法
-
VBAの定数の使い方で、計算値を...
-
コンボボックスの名前を変数に...
-
C#の問題で2つの整数a,bの...
-
足して100になるような乱数のア...
-
乱数の最大値
-
相関係数p値の出し方
-
【C++/CLI】String型文字列の位...
-
ラジオボタンの値の取得につい...
-
4択問題のプログラムでランダム...
-
フリーランタイマーの時間差分...
-
形式を選択して貼り付け 以下の...
-
Rubyでハッシュの中の値からキ...
-
C#で動的にコントロールを取得...
-
ARM Cortex-M3のタイマー処理方法
-
数字の位ごとの値を表示するプ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 exitの使い方
-
フォームを開くときに、コンボ...
-
Excel-vba 文字列と変数を...
-
足して100になるような乱数のア...
-
数字の位ごとの値を表示するプ...
-
VB6.0-整数と余りを求める
-
VBAで配列のNULL判定
-
1つ前の値を変数に保存する方法
-
Access2003 オートナンバーの現...
-
UWSCのcallについて
-
C#で動的にコントロールを取得...
-
ラジオボタンの値の取得につい...
-
VBAの定数の使い方で、計算値を...
-
相関係数p値の出し方
-
DWORDって
-
世界のナベアツ
-
DataGridView 複数行同時変更...
-
10進数をアスキーコードに変換
-
c言語で乱数を扱うときの
-
VBAのチェックボックス結果を集...
おすすめ情報