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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フォームを開くときに、コンボ...
-
Excel-vba 文字列と変数を...
-
DWORDって
-
C言語 exitの使い方
-
4択問題のプログラムでランダム...
-
VBA 参照渡しの仕様について
-
long型のランダムな値を返す方法
-
数字の位ごとの値を表示するプ...
-
バブルソートとクイックソート
-
足して100になるような乱数のア...
-
データ構造のmapとは?
-
コンボボックスの名前を変数に...
-
1つ前の値を変数に保存する方法
-
VBAでダブルコーテーション入り...
-
Cプログラムについて
-
EXCEL/VBA 変数の値をクリップ...
-
Accessコンボボックスにレコー...
-
ワードで文字数を数える方法
-
正規表現で、英数記号を含むパ...
-
vbsでテキストファイル内の文字...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 exitの使い方
-
フォームを開くときに、コンボ...
-
Excel-vba 文字列と変数を...
-
VB6.0-整数と余りを求める
-
足して100になるような乱数のア...
-
VBAの定数の使い方で、計算値を...
-
DWORDって
-
世界のナベアツ
-
VBAで配列のNULL判定
-
C#で動的にコントロールを取得...
-
数字の位ごとの値を表示するプ...
-
long型のランダムな値を返す方法
-
UWSCのcallについて
-
フリーランタイマーの時間差分...
-
1つ前の値を変数に保存する方法
-
VB6でのLog
-
C言語でCLAMP(a,b,c)
-
DataGridView 複数行同時変更...
-
コンボボックスの名前を変数に...
-
バッチファイルで正規表現を使...
おすすめ情報