ヘッダー
Visual Basic サンプル集
 

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

2022/11/20

→ C# のサンプルに切り替える → Python のサンプルに切り替える

 

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

VB2017対応 VB2019対応 Visual Studio 2022

Dim number As Integer = RandomNumberGenerator.GetInt32(5, 81)
Debug.WriteLine(number)

Debug.WriteLineが表示される場所

メモ:低速といっても私のパソコンでは100万回の実行で約0.18秒程度でしたので、通常の用途では十分な速度です。→ 参考:RandomNumberGenerator と Random の比較

メモ:.NET Framework (2019年以前にリリース)では使用できません。

 

 

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

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

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)

Debug.WriteLineが表示される場所

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

 

 

ランダムな小数を高精度・低速で生成する

この例はDoubleの範囲内(±1000兆の1000兆倍の100万倍程度)でランダムな小数を生成します。

実行するには.NET 6.0 (2021年11月リリース)以上が必要です。

Visual Studio 2022

Dim number As Double = BitConverter.ToDouble(RandomNumberGenerator.GetBytes(8), 0)
Debug.WriteLine(number) 'たとえば、5.770203524612446E-70 と出力されます。

Debug.WriteLineが表示される場所

メモ:低速といっても私のパソコンでは100万回の実行で約0.16秒程度でしたので、通常の用途では十分な速度です。→ 参考:RandomNumberGenerator と Random の比較

メモ:整数を生成する GetInt32メソッドと異なり、GetBytesメソッドでは値の範囲指定はできません。

 

 

0.0 以上 1.0 未満のランダムな小数を低精度・高速で生成する

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

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 と出力されます。

Debug.WriteLineが表示される場所

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

メモ:整数を生成する Nextメソッドと異なり、NextDoubleメソッドでは値の範囲指定はできません。

 

 

6.6 以上 11.3 未満のランダムな小数を低精度・高速で生成する

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

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 と出力されます。

Debug.WriteLineが表示される場所

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

 

 

参考:RandomNumberGenerator と Random の比較

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

 


VB6対応 VB6では Rnd関数を使用します。