C# サンプル集 |
Visual Basic 中学校 > C# サンプル集 > C# サンプル集目次 >
ランダムな数値を生成する
2022/11/20
→ Visual Basic のサンプルに切り替える → Python のサンプルに切り替える
目次
5 以上 80 以下のランダムな整数を高精度・低速で生成する
int number = RandomNumberGenerator.GetInt32(5, 81);
System.Diagnostics.Debug.WriteLine(number);
メモ:低速といっても私のパソコンでは100万回の実行で約0.18秒程度でしたので、通常の用途では十分な速度です。→ 参考:RandomNumberGenerator と Random の比較
メモ:.NET Framework (2019年以前にリリース)では使用できません。
5 以上 80 以下のランダムな整数を低精度・高速で生成する
int number = Random.Shared.Next(5, 81);
//Random r = new Random(); //←.NET 6.0(2021年11月)より前の場合この2行を使用します。
//int number = r.Next(5, 81);
System.Diagnostics.Debug.WriteLine(number);
メモ:低精度といっても通常の使用には十分な精度です。→ 参考:RandomNumberGenerator と Random の比較
ランダムな小数を高精度・低速で生成する
この例はdoubleの範囲内(±1000兆の1000兆倍の100万倍程度)でランダムな小数を生成します。
実行するには.NET 6.0 (2021年11月リリース)以上が必要です。
double number = BitConverter.ToDouble(RandomNumberGenerator.GetBytes(8), 0);
System.Diagnostics.Debug.WriteLine(number); //たとえば、5.770203524612446E-70 と出力されます。
メモ:低速といっても私のパソコンでは100万回の実行で約0.16秒程度でしたので、通常の用途では十分な速度です。→ 参考:RandomNumberGenerator と Random の比較
メモ:整数を生成する GetInt32メソッドと異なり、GetBytesメソッドでは値の範囲指定はできません。
0.0 以上 1.0 未満のランダムな小数を低精度・高速で生成する
double number = Random.Shared.NextDouble();
//Random r = new Random(); //←.NET 6.0(2021年11月)より前の場合この2行を使用します。
//double number = r.NextDouble();
System.Diagnostics.Debug.WriteLine(number); //たとえば、0.8754042864503406 と出力されます。
メモ:低精度といっても通常の使用には十分な精度です。→ 参考:RandomNumberGenerator と Random の比較
メモ:整数を生成する Nextメソッドと異なり、NextDoubleメソッドでは値の範囲指定はできません。
6.6 以上 11.3 未満のランダムな小数を低精度・高速で生成する
double min = 6.6;
double max = 11.3;
double rawNumber = Random.Shared.NextDouble();
//Random r = new Random(); //←.NET 6.0(2021年11月)より前の場合この2行を使用します。
//double rawNumber = r.NextDouble();
double number = rawNumber * (max - min) + min;
System.Diagnostics.Debug.WriteLine(number); //たとえば、10.06912708342525 と出力されます。
メモ:低精度といっても通常の使用には十分な精度です。→ 参考:RandomNumberGenerator と Random の比較
参考:RandomNumberGenerator と Random の比較
方法 | RandomNumberGenerator | Random | ||
---|---|---|---|---|
アドバイス | ○ | よくわからない人はこっちを使いましょう。 | ||
どういう処理が得意? | ○ | セキュリティ関連の処理。 たとえば、ランダムなパスワードの生成。 |
○ | (セキュリティに関連しない) ゲームや、Webアプリケーション、科学的な計算など |
生成する値は予測可能? | ○ | 困難 | △ | 可能な場合がある |
セキュリティ大丈夫? | ○ | OK! | × | 推奨されていない |
プログラムのしやすさ | △ | 整数はOK。 小数は扱いにくい。 |
○ | 整数はOK。 小数はちょっと扱いにくい。 |
速い? | △ | 100万個の数値の生成に約0.18秒かかった。 (私のパソコンで) Randomと比べれば約10倍遅いけど、 それでも100万個で0.18秒なら十分?? |
○ | 100万個の数値の生成に約0.02秒かかった。 (私のパソコンで) |
みんなは使ってる? | △ | あまり有名な方法じゃないので 特に必要な人だけ使っている。 |
○ | 昔からあるやり方なので 基本的にみんなこれを使っている。 |