Randomクラスによる乱数の出力 – プログラミング – Home

Randomクラスによる乱数の出力
 
通知
すべてクリア

[解決済] Randomクラスによる乱数の出力


そうじろう
 そうじろう
(@そうじろう)
ゲスト
結合: 20年前
投稿: 2
Topic starter  

はじめまして。WinXP VC++.NET 2003です。

フォームアプリに挑戦しています。System::Random を使って乱数を出力しようと思うん
ですが、

System::Random* r = new System::Random(1000);
int j = r->Next(0,10);

こんな感じでしょうか。この最初の文のRandom(シード値(?))のシードの値と言うもの
が良く分からないんですが、教えていただけませんか?
それから、この方法だと実行の際には常に同じ値になるのでDateTimeを使い、このシー
ド(?)に代入すると、毎回違う値になるはずですが、うまくいきません。実例で教え
ていただけないでしょうか?


引用未解決
トピックタグ
YuO
 YuO
(@YuO)
ゲスト
結合: 22年前
投稿: 320
 

シード値をとらないコンストラクタを使う,という選択肢はだめですか?
複数の乱数系列が欲しい場合を除くと,悪くない解だと思いますが。

System::Random* r = new System::Random();
int j = r->Next(0,10);


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 59
 

> うまくいきません。
どう上手くいかないのでしょうか?

System::Random* r = new System::Random( ( int )System::DateTime::Now.Ticks );

では上手くいかない?

YuOさんもおっしゃっていますが
> 複数の乱数系列が欲しい場合を除く
のならば、引数なしで十分ですね。

以下MSDNより
> Random コンストラクタ ()
> 時間に応じて決定される既定のシード値を使用し、
> Random クラスの新しいインスタンスを初期化します。

> Random コンストラクタ (Int32)
> 指定したシード値を使用して Random クラスの新しいインスタンスを初期化します。

> DateTime.Now プロパティ
> このコンピュータの現在のローカルな日付と時刻である DateTime を取得します。

> DateTime.Ticks プロパティ
> このインスタンスの日付と時刻を表すタイマ刻み数を取得します。


返信引用
aetos
(@aetos)
Noble Member
結合: 6年前
投稿: 1480
 

答えは出てるようなので、俺はうんちく担当。

> シードの値と言うものが良く分からないんですが、教えていただけませんか?

シードってのは「種」という意味。
乱数を生成する元になる値という意味です。

そもそも、コンピュータで生成する乱数は完全な乱数ではなく、擬似乱数といいます。
本当は出てくる値に規則性があって、完全にランダムではないんだけれど、その規則性
を簡単には予測できないような値を生成します。

で、
1.最初に適当な値を与える(これがシード値)
2.シード値をもとに計算し、最初の乱数を生成する
3.先ほど計算した値をシード値として計算し、次の乱数を生成する
4.以降繰り返し
という仕組みになっています。
この繰り返しのことを「乱数系列」と言います。


返信引用
そうじろう
 そうじろう
(@そうじろう)
ゲスト
結合: 20年前
投稿: 2
Topic starter  

みなさんありがとうございます。
詳しい説明とてもありがたいです。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 21年前
投稿: 1467
 

何がまずくてうまくいかなかったのか?
アドバイスを受けてどのようにしたのか?

をちゃんと明記しましょう。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました