C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ツリー一括表示

srandを1秒で何回も呼び出すときの乱数について /しー (18/12/30(Sun) 19:35) #89807
Re[1]: srandを1秒で何回も呼び出すときの乱数について /Hongliang (18/12/30(Sun) 19:47) #89808
  └ Re[2]: srandを1秒で何回も呼び出すときの乱数について /アルハンブラ (19/01/02(Wed) 23:05) #89814
    └ Re[3]: srandを1秒で何回も呼び出すときの乱数について /しー (19/01/07(Mon) 16:44) #89835 解決済み


親記事 / ▼[ 89808 ]
■89807 / 親階層)  srandを1秒で何回も呼び出すときの乱数について
□投稿者/ しー (3回)-(2018/12/30(Sun) 19:35:52)

分類:[C/C++] 

C++における乱数について

srandで時刻で乱数シードを初期化したものの、
同時刻で呼び出してしまうと同じ値が帰ってきてしまいます。

何か良い策ないでしょうか?

[ □ Tree ] 返信 編集キー/

▲[ 89807 ] / ▼[ 89814 ]
■89808 / 1階層)  Re[1]: srandを1秒で何回も呼び出すときの乱数について
□投稿者/ Hongliang (735回)-(2018/12/30(Sun) 19:47:12)
srandは通常、プログラムの起動時に1回だけ呼び出すものです。
なお標準ライブラリのrandは擬似乱数として最低レベルの品質なので、ごく簡単な使い方をするのでもなければ他のアルゴリズムを使った実装を使った方が良いです。
[ 親 89807 / □ Tree ] 返信 編集キー/

▲[ 89808 ] / ▼[ 89835 ]
■89814 / 2階層)  Re[2]: srandを1秒で何回も呼び出すときの乱数について
□投稿者/ アルハンブラ (8回)-(2019/01/02(Wed) 23:05:02)
やり方はいろいろありそうです。
思いつくものでは、

1. 排他制御を入れる
  → 単純に、同じタイミングで呼び出さなければ良いだけなのでmutexなりCriticalSectionなりで良いのでは?

2. 乱数で C++11 の std::randomを使う
  → 乱数の特性を変えて複数初期化すれば同じタイミングでも問題は無いはず。
   → c.f. http://vivi.dyndns.org/tech/cpp/random.html

というものがありそうです。
[ 親 89807 / □ Tree ] 返信 編集キー/

▲[ 89814 ] / 返信無し
■89835 / 3階層)  Re[3]: srandを1秒で何回も呼び出すときの乱数について
□投稿者/ しー (4回)-(2019/01/07(Mon) 16:44:33)
ありがとうございました。
解決済み
[ 親 89807 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -