在 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# 中生成隨機浮點數的方法。

使用 C# 中的 Random.NextDouble() 函式在 01 之間生成隨機浮點數

遺憾的是,沒有內建的方法可以在 C# 中生成隨機數。因此,我們必須依靠一些使用者定義的方法來實現此目標。Random.NextDouble() 函式用來生成一個介於 01 之間的隨機雙精度值。我們可以使用此函式生成介於 01 之間的隨機雙精度值,然後將該隨機值強制轉換為浮點型。下面的程式碼示例向我們展示瞭如何使用 C# 中的 Random.NextDouble() 函式在 01 之間生成隨機浮點數。

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 之間生成了一個隨機浮點數。我們首先生成一個介於 01 之間的隨機雙精度值,然後使用型別轉換將該雙精度值轉換為浮點數。

使用 C# 中的 Random.NextDouble() 函式生成不帶範圍的隨機浮點數

我們也可以使用 C# 中的 Random.NextDouble() 函式生成一個隨機浮點數,而無需在 01 之間設定範圍。此方法中唯一的範圍是 float 資料型別可以在其中儲存的值的範圍。我們可以使用 float.MaxValuefloat.MinValue 來指定 float 資料型別可以儲存的最大值和最小值。以下程式碼示例向我們展示瞭如何在不使用 C# 中的 Random.NextDouble() 函式指定範圍的情況下生成隨機浮點數。

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() 函式生成了一個無範圍的隨機浮點數。我們使用 float.MaxValue - float.MinValue 初始化了雙變數 range,然後將其型別轉換為 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 之間生成了一個隨機浮點數。我們指定 minmax 值,並使用 range = max - min 來計算 range。我們通過將 Random.NextDouble() 函式返回的值與 range 相乘並在結果中加上 min 來計算隨機值。最後,我們通過型別轉換將隨機值轉換為 float 資料型別。

在 C# 中使用 Random.NextBytes() 函式生成隨機浮點數

我們還可以使用 C# 中的 Random.NextBytes() 函式生成一個隨機浮點數。Random.NextBytes(byte[]) 函式用於填充帶有隨機位元組值的 byte[] 陣列。我們可以通過將儲存在 byte[] 中的位元組轉換為浮點資料型別來生成隨機浮點數。以下程式碼示例向我們展示瞭如何使用 C# 中的 Random.NextBytes() 函式生成隨機浮點數。

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() 函式生成了一個隨機浮點數。我們使用 Random.NextBytes() 函式用隨機位元組值填充 array 陣列。我們使用 BitConverter.ToSingle() 函式將位元組值轉換為浮點型。

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