C# でランダムフロートを生成する

  1. C# の Random.NextDouble() 関数を使用して、01 の間のランダムフロートを生成する
  2. C# の Random.NextDouble() 関数を使用して、範囲のないランダムフロートを生成する
  3. C# の Random.NextDouble() 関数を使用して、特定の範囲内でランダムフロートを生成する
  4. C# で Random.NextBytes() 関数を使用してランダムフロートを生成する

このチュートリアルでは、C# でランダムな float 値を生成する方法について説明します。

C# の Random.NextDouble() 関数を使用して、01 の間のランダムフロートを生成する

残念ながら、C# で乱数を生成するための組み込みメソッドはありません。したがって、この目標を達成するには、いくつかのユーザー定義メソッドに依存する必要があります。Random.NextDouble() 関数は、ランダムな double 値を生成するために使用されます 01 の間。この関数を使用して、01 の間のランダムな double 値を生成し、そのランダムな値を float にタイプキャストできます。次のコード例は、C# の Random.NextDouble() 関数を使用して、01 の間でランダムな float 値を生成する方法を示しています。

using System;

namespace random_float
{
    class Program
    {
        static void Main(string[] args)
        {
            Random rand = new Random();
            for(int i = 0; i < 10; i++)
            {
                float randomFloat = (float)rand.NextDouble();
                Console.WriteLine("Random Float = {0}", randomFloat);
            }
        }
    }
}

出力:

Random Float = 0.3914659
Random Float = 0.8927528
Random Float = 0.6579643
Random Float = 0.4404075
Random Float = 0.3213561
Random Float = 0.3399849
Random Float = 0.04562188
Random Float = 0.1881405
Random Float = 0.7638124
Random Float = 0.1645804

C# の Random.NextDouble() 関数を使用して、01 の間のランダムな float 値を生成しました。最初に 01 の間でランダムな double 値を生成し、次に型キャストを使用してその double 値を float 値に変換しました。

C# の Random.NextDouble() 関数を使用して、範囲のないランダムフロートを生成する

C# の Random.NextDouble() 関数を使用して、01 の範囲を設定せずにランダムな float 値を生成することもできます。このメソッドの唯一の範囲は、float データ型が保持できる値の範囲です。float.MaxValuefloat.MinValue を使用して、float データ型が格納できる最大値と最小値を指定できます。次のコード例は、C# の Random.NextDouble() 関数で範囲を指定せずにランダムな float 値を生成する方法を示しています。

using System;

namespace random_float
{
    class Program
    {
        static void Main(string[] args)
        {
            Random rand = new Random();
            double range = (double)float.MaxValue - (double)float.MinValue;
            for(int i = 0; i < 10; i++)
            {
                double sample = rand.NextDouble();
                double scaled = (sample * range) + float.MinValue;
                float f = (float)scaled;
                Console.WriteLine(f);

            }
        }
    }
}

出力:

1.500952E+38
-1.930891E+38
2.951987E+38
-1.205054E+38
-6.225039E+37
3.843309E+36
-1.241292E+38
1.360907E+38
1.769061E+38
-1.577001E+38

C# の Random.NextDouble() 関数を使用して、範囲のないランダムな浮動小数点値を生成しました。double 変数 rangefloat.MaxValue - float.MinValue で初期化し、それを double データ型に型キャストしました。これにより、ランダムな値の範囲が、float データ型が処理できる値の範囲内にとどまることが保証されます。Random.NextDouble() 関数によって返される値に range を掛け、その結果に float.MinValue を追加することにより、ランダム値を計算しました。最後に、ランダム値を型キャストを使用して float データ型に変換しました。

C# の Random.NextDouble() 関数を使用して、特定の範囲内でランダムフロートを生成する

C# の Random.NextDouble() 関数を使用して、特定の範囲内でランダムな値を生成することもできます。たとえば、110 の間でランダムなフロート値を生成する必要があるとします。その場合、Random.NextDouble() 関数を使用して 01 の間のランダムな値を生成し、それを範囲で乗算してから、それに最小値を追加できます。次のコード例は、C# の Random.NextDouble() 関数を使用して、指定された範囲の間に乱数を生成する方法を示しています。

using System;

namespace random_float
{
    class Program
    {
        static void Main(string[] args)
        {
            Random rand = new Random();
            double min = 1;
            double max = 10;
            double range = max - min;
            for (int i = 0; i < 10; i++)
            {
                double sample = rand.NextDouble();
                double scaled = (sample * range) + min;
                float f = (float)scaled;
                Console.WriteLine(f);

            }
        }
    }
}

出力:

3.468961
8.04868
2.210197
8.150612
4.217263
5.328617
4.730082
8.462176
2.679844
8.609394

C# の Random.NextDouble() 関数を使用して、110 の間のランダムな float 値を生成しました。minmax の値を指定し、range = max - minrange を計算しました。Random.NextDouble() 関数によって返される値に range を掛け、その結果に min を追加することにより、ランダム値を計算しました。最後に、ランダム値を型キャストを使用して float データ型に変換しました。

C# で Random.NextBytes() 関数を使用してランダムフロートを生成する

C# の Random.NextBytes() 関数を使用してランダムな float 値を生成することもできます。Random.NextBytes(byte[]) 関数は、ランダムなバイト値を持つ byte[] 配列。byte[] に格納されているバイトを float データ型に変換することで、ランダムな float 値を生成できます。次のコード例は、C# の Random.NextBytes() 関数を使用してランダムな float 値を生成する方法を示しています。

using System;

namespace random_float
{
    class Program
    {
        static void Main(string[] args)
        {
            Random rand = new Random();
            for (int i = 0; i < 10; i++)
            {
                var array = new byte[4];
                rand.NextBytes(array);
                float randomFloat = BitConverter.ToSingle(array, 0);
                Console.WriteLine("Random Value = {0}", randomFloat);

            }
        }
    }
}

出力:

Random Value = 2.021232E-20
Random Value = -121623
Random Value = -1.564382E+38
Random Value = 1.146448E-14
Random Value = -6.874067E-22
Random Value = -1.226989E+31
Random Value = -3.01435E+08
Random Value = -8.568415E+30
Random Value = -1.454825E+27
Random Value = 3.801608E-26

C# の Random.NextBytes() 関数を使用してランダムな float 値を生成しました。Random.NextBytes() 関数を使用して、array 配列にランダムなバイト値を入力しました。BitConverter.ToSingle() 関数を使用してバイト値を float に変換しました。

関連記事 - Csharp Float

  • C# での浮動小数点 vs 倍精度 vs 10 進数