首頁 >Java >java教程 >如何在Java中產生特定範圍內均勻分佈的隨機BigInteger值?

如何在Java中產生特定範圍內均勻分佈的隨機BigInteger值?

Linda Hamilton
Linda Hamilton原創
2024-10-25 02:46:02926瀏覽

How to Generate Uniformly Distributed Random BigInteger Values within a Specific Range in Java?

在Java 中產生隨機BigInteger 值

在Java 中,處理大數時產生指定範圍內的隨機整數可能具有挑戰性。使用nextDouble() 等傳統方法產生隨機數時會出現問題,因為產生的值可能不會均勻分佈超出253.

利用BigInteger 建構子

為了解決這個問題,BigInteger 類別提供了一個建構函數,可以建立在指定位元範圍內均勻分佈的隨機BigInteger 值。

建構BigInteger 建構子:

<code class="java">public BigInteger(int numBits, Random rnd)</code>

此建構子採用兩個參數:

  • 指定產生值的位數
  • rnd:
  • 用於產生隨機值的Random 物件
產生一個範圍內的隨機值

產生一個範圍內的隨機值0 到n(含)的非2 冪範圍,可以使用循環:

此循環迭代,直到獲得有效的隨機值。它確保產生的值在指定範圍內均勻分佈。
<code class="java">BigInteger randomNumber;
do {
    randomNumber = new BigInteger(upperLimit.bitLength(), randomSource);
} while (randomNumber.compareTo(upperLimit) >= 0);</code>

最佳化迭代次數

為了減少循環迭代次數,可以應用更精細的解.

此方法包括對迭代次數的限制,以防止過多的循環執行。它平衡了速度和準確性,減少了大量迭代的可能性。
<code class="java">int nlen = upperLimit.bitLength();
BigInteger nm1 = upperLimit.subtract(BigInteger.ONE);
BigInteger randomNumber, temp;
do {
    temp = new BigInteger(nlen + 100, randomSource);
    randomNumber = temp.mod(upperLimit);
} while (s.subtract(randomNumber).add(nm1).bitLength() >= nlen + 100);</code>

以上是如何在Java中產生特定範圍內均勻分佈的隨機BigInteger值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn