C#のRandom.NextDouble()メソッドの使い方を徹底解説
C#におけるRandom.NextDouble()メソッドは、0.0以上1.0未満の範囲でランダムな浮動小数点数(double型)を返すためのメソッドです。乱数を使ったシミュレーションやゲーム開発など、幅広い場面で活用されます。
構文
NextDouble()メソッドの構文は以下のとおりです。
public virtual double NextDouble ();
使用例1:バイト配列の乱数と浮動小数点数の乱数を取得する
まずは基本的な使用例を見てみましょう。NextBytes()メソッドでバイト配列にランダムな値を格納しつつ、NextDouble()メソッドで浮動小数点数の乱数も生成しています。
using System;
public class Demo {
public static void Main(){
Random r1 = new Random();
Random r2 = new Random();
Byte[] arr = new Byte[2];
r1.NextBytes(arr);
Console.WriteLine("バイト配列内のランダムな数値...");
for (int i = 0; i < 2; i++)
Console.WriteLine(arr[i]);
Console.WriteLine("\nランダムな浮動小数点数...");
for (int i = 0; i < 5; i++)
Console.WriteLine(r2.NextDouble());
}
}実行結果
上記のコードを実行すると、次のような出力が得られます。※乱数のため、実行ごとに結果は異なります。
バイト配列内のランダムな数値... 124 141 ランダムな浮動小数点数... 0.93591266727816 0.36406785872023 0.122396959514542 0.795166163144245 0.954394097884369
使用例2:乱数の出現回数を集計する
続いて、NextDouble()メソッドで生成した乱数をMath.Ceiling()メソッドで整数化し、各区間に出現した回数をカウントする例を見てみましょう。
using System;
public class Demo {
public static void Main(){
int[] val = new int[7];
Random r = new Random();
double d;
for (int i = 0; i < 50; i++) {
d = r.NextDouble();
val[(int) Math.Ceiling(d*5)] ++;
}
Console.WriteLine("ランダムな数値の集計結果...");
for (int i = 0; i < 7; i++)
Console.WriteLine(val[i]);
}
}実行結果
このコードを実行すると、各インデックスに対応する区間へ乱数が振り分けられた回数が出力されます。乱数がほぼ均等に分布していることが確認できます。
ランダムな数値の集計結果... 0 13 9 12 8 8 0
まとめ
Random.NextDouble()メソッドを使えば、0.0以上1.0未満のdouble型の乱数を簡単に生成できます。戻り値をスケーリングすることで任意の範囲の乱数に変換できるため、確率的な処理やモンテカルロ法などのシミュレーションにも応用可能です。ぜひ実際のコードで試してみてください。
-
JavaScriptでランダムな数値を生成する方法|Math.random()の使い方を解説
JavaScriptのMath.random()関数は、0以上1未満の範囲でランダムな浮動小数点数を生成するために使用されます。戻り値は「0以上・1未満」であり、1自体は含まれない点に注意してください。この関数を活用すれば、サイコロのようなランダムな整数の生成や、くじ引き・シャッフル処理など、さまざまな場面で乱数を利用できます。Math.random()で1〜10のランダムな整数を生成する方法1から10までのランダムな整数を取得するには、Math.random()の結果に10を掛け、Math.floor()で小数点以下を切り捨てた後、1を加算します。数式で表すと以下のようになります。Math.
-
RubyのArray#zipメソッド徹底解説!2つの配列をスマートに結合する方法
2つの配列を要素ごとに比較して、その違いを見つけたいと思ったことはありませんか? あるいは、各インデックスごとに最大の数値を求めたい、キーのリストと値のリストを組み合わせてハッシュを作りたい――そんな場面にも出会うことがあるでしょう。 …これを「面倒な方法」で実装すると、次のようなコードになります。 例:冗長な書き方 a = [1,2,3,4,5] b = [1,2,3,6,8] c = a.map.with_index { |_, idx| [a[idx], b[idx]] } # [[1, 1], [2, 2], [3, 3], [4, 6], [5, 8]] 確かに動作はしますが