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

## 如何在 Java 中產生特定範圍內的隨機 BigInteger 值?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-25 07:18:29379瀏覽

## How do you generate random BigInteger values within a specific range in Java?

在Java 中產生隨機BigInteger 值

在需要產生指定範圍內的任意大隨機整數的情況下,常見的方法可能涉及使用nextDouble() 並相乘輸出達到所需的限制。但是,對於超過 2^53 的值,此方法會出現問題,導致分佈不均勻。

為了克服此限制,Java 提供了 BigInteger 類,該類提供了一個構造函數,可以產生在 0 到 0 之間均勻分佈的隨機數(2^numBits - 1),包含在內。

產生非2 冪範圍內的隨機值

產生0 到n 範圍內的隨機值,其中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>

這個修改後的版本極不可能需要多次迭代(機率小於2^100)。然而,由於 mod() 操作,它會產生計算損失。因此,僅當隨機數產生器特別慢時才建議使用。

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

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