ヘッダー
C# サンプル集
 

ランダムな数値を生成する

2022/11/20

→ Visual Basic のサンプルに切り替える → Python のサンプルに切り替える

 

5 以上 80 以下のランダムな整数を高精度・低速で生成する

int number = RandomNumberGenerator.GetInt32(5, 81);
System.Diagnostics.Debug.WriteLine(number);

Debug.WriteLineが表示される場所

メモ:低速といっても私のパソコンでは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);

Debug.WriteLineが表示される場所

メモ:低精度といっても通常の使用には十分な精度です。→ 参考: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 と出力されます。

Debug.WriteLineが表示される場所

メモ:低速といっても私のパソコンでは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 と出力されます。

Debug.WriteLineが表示される場所

メモ:低精度といっても通常の使用には十分な精度です。→ 参考: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 と出力されます。

Debug.WriteLineが表示される場所

メモ:低精度といっても通常の使用には十分な精度です。→ 参考:RandomNumberGenerator と Random の比較

 

 

参考:RandomNumberGenerator と Random の比較

方法 RandomNumberGenerator Random
アドバイス よくわからない人はこっちを使いましょう。    
どういう処理が得意? セキュリティ関連の処理。
たとえば、ランダムなパスワードの生成。
(セキュリティに関連しない)
ゲームや、Webアプリケーション、科学的な計算など
生成する値は予測可能?  困難 可能な場合がある
セキュリティ大丈夫?  OK! × 推奨されていない
プログラムのしやすさ 整数はOK。
小数は扱いにくい。
整数はOK。
小数はちょっと扱いにくい。
速い?  100万個の数値の生成に約0.18秒かかった。
(私のパソコンで)
Randomと比べれば約10倍遅いけど、
それでも100万個で0.18秒なら十分??
100万個の数値の生成に約0.02秒かかった。
(私のパソコンで)
みんなは使ってる? あまり有名な方法じゃないので
特に必要な人だけ使っている。
昔からあるやり方なので
基本的にみんなこれを使っている。