買太郎'sキャッシュメモリFab

キャッシュ生産中。。。

目次

ニュース

ledys bikoujun

日記カテゴリ

書庫

ギャラリ

Blog 利用状況

高速なコンピュータみたい

おめでとうございます。

今年から、新しい業務について、ますます微妙な感じですが、心機一転、初心に戻って。。。
がんばってみましょう。


new System.Random()を使用して、ランダムな文字列を2回連続して生成してると、2回とも同じ値になってハマッテしまったので、メモ

http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/cpref/html/frlrfsystemrandomclassctortopic2.asp

どうやらMyPcは、上記リンク先の解説に記述される、高速なコンピュータに該当するらしく、同じ乱数が取れるようです。

MSDNのサンプルだと、2回は行けるけど、3回.....と違う乱数を発生させれる方法は?
んと、ちと考えよ

投稿日時 : 2007年1月16日 2:12

Feedback

# re: 高速なコンピュータみたい 2007/01/16 3:10 買太郎

シード値を(int)DateTime.Now.Ticksとして、
前回取得したシード値をランダム文字列生成クラスに記憶させて置き、
次回ランダム文字列生成時に、シード値が変更になるまでループして、
変更になった、シード値で乱数を生成して、前回と違うランダム文字列を作成する事にした。

# re: 高速なコンピュータみたい 2007/01/16 17:36 中博俊

というかSEEDを設定するのはアプリケーションで1回にすべきです。
なのでstaticなクラスにラップして同じrandomクラスを使いまわすようにしてください。

#向うは間違い(^^;

# re: 高速なコンピュータみたい 2007/01/16 21:46 Jitta

> シード値が変更になるまでループして
え~?せっかく「憶えて」いるなら、そこからインクリメントしていけば良いだけでは?
というか、アプリケーションで1組の乱数があればいいのであれば、毎回コンストラクトしなくても良いのでは?

# re: 高速なコンピュータみたい 2007/01/16 21:55 ネットクラゲ

基本的には、中博俊さんのおっしゃるとおり同一インスタンスを使いまわすべきです。
が、現実的に可能な有限の個数で乱数がループしてしまうので、ゲームや分析に使用する場合のように大量の乱数を必要とする場合は、途中でSEEDを再設定する必要があります。

・一定時間毎に再設定
・SEEDを設定する毎に乱数で決定した時間の経過後に再設定
・SEEDを設定する毎に乱数で決定した個数取り出した後に再設定

みたいな感じで。
(乱数パターンが同じでもいいなら必要ないですが。)

# re: 高速なコンピュータみたい 2007/01/17 0:21 買太郎

コメントありがとうございます

new System.Random()をVB6で言うところのRandomize(初期化)みたいなもんだと、勘違いしてました。
randomを使い回す方向で、実装してみます。

SEEDを再設定については、大量の乱数があったら、参考にさせてもらいます。

勉強になりました。

タイトル
名前
Url
コメント