| Visual Basic サンプル集 | 
Visual Basic 中学校 > Visual Basic サンプル集 > Visual Basic サンプル集目次 >
ランダムな数値を生成する
2022/11/20
→ C# のサンプルに切り替える → Python のサンプルに切り替える
目次
5 以上 80 以下のランダムな整数を高精度・低速で生成する
  
  
 
Dim number As Integer = RandomNumberGenerator.GetInt32(5, 81)
Debug.WriteLine(number)
					メモ:低速といっても私のパソコンでは100万回の実行で約0.18秒程度でしたので、通常の用途では十分な速度です。→ 参考:RandomNumberGenerator と Random の比較
メモ:.NET Framework (2019年以前にリリース)では使用できません。
5 以上 80 以下のランダムな整数を低精度・高速で生成する
					 
  
  
  
  
  
  
  
  
  
 
Dim number As Integer = Random.Shared.Next(5, 81)
'Dim r As New Random() '←.NET 6.0(2021年11月)より前の場合この2行を使用します。
'Dim number As Integer = r.Next(5, 81)
Debug.WriteLine(number)
					メモ:低精度といっても通常の使用には十分な精度です。→ 参考:RandomNumberGenerator と Random の比較
ランダムな小数を高精度・低速で生成する
この例はDoubleの範囲内(±1000兆の1000兆倍の100万倍程度)でランダムな小数を生成します。
実行するには.NET 6.0 (2021年11月リリース)以上が必要です。
 
Dim number As Double = BitConverter.ToDouble(RandomNumberGenerator.GetBytes(8), 0)
Debug.WriteLine(number) 'たとえば、5.770203524612446E-70 と出力されます。
					メモ:低速といっても私のパソコンでは100万回の実行で約0.16秒程度でしたので、通常の用途では十分な速度です。→ 参考:RandomNumberGenerator と Random の比較
メモ:整数を生成する GetInt32メソッドと異なり、GetBytesメソッドでは値の範囲指定はできません。
0.0 以上 1.0 未満のランダムな小数を低精度・高速で生成する
 
  
  
  
  
  
  
  
  
  
 
Dim number As Double = Random.Shared.NextDouble()
'Dim r As New Random() '←.NET 6.0(2021年11月)より前の場合この2行を使用します。
'Dim number As Double = r.NextDouble()
Debug.WriteLine(number) 'たとえば、0.8754042864503406 と出力されます。
					メモ:低精度といっても通常の使用には十分な精度です。→ 参考:RandomNumberGenerator と Random の比較
メモ:整数を生成する Nextメソッドと異なり、NextDoubleメソッドでは値の範囲指定はできません。
6.6 以上 11.3 未満のランダムな小数を低精度・高速で生成する
 
  
  
  
  
  
  
  
  
  
 
Dim min As Double = 6.6
Dim max As Double = 11.3
Dim rawNumber As Double = Random.Shared.NextDouble()
'Dim r As New Random() '←.NET 6.0(2021年11月)より前の場合この2行を使用します。
'Dim rawNumber As Double = r.NextDouble()
Dim number As Double = rawNumber * (max - min) + min
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秒かかった。 (私のパソコンで) | 
| みんなは使ってる? | △ | あまり有名な方法じゃないので 特に必要な人だけ使っている。 | ○ | 昔からあるやり方なので 基本的にみんなこれを使っている。 | 
 VB6では Rnd関数を使用します。
 
				VB6では Rnd関数を使用します。