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

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

このチュートリアルでは、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 に変換しました。

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

関連記事 - Csharp Float