So generieren Sie zufällige BigInteger-Werte innerhalb eines benutzerdefinierten Bereichs in Java
So generieren Sie zufällige BigInteger-Werte innerhalb eines angegebenen Bereichs, insbesondere im oberen Bereich limit (n) keine Potenz von 2 ist, kann der Konstruktor BigInteger(int numBits, Random rnd) verwendet werden.
Um dies zu erreichen, ist eine Schleife notwendig:
<code class="java">BigInteger randomNumber; do { randomNumber = new BigInteger(upperLimit.bitLength(), randomSource); } while (randomNumber.compareTo(upperLimit) >= 0);</code>
Dies Der Ansatz sorgt für eine gleichmäßige Verteilung innerhalb des angegebenen Bereichs und erfordert normalerweise weniger als zwei Iterationen.
Aus Effizienzgründen kann die Anzahl der Iterationen begrenzt werden:
<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>
Während diese Version eine schnelle Fertigstellung in fast sicherstellt In allen Fällen wird eine rechenintensivere mod()-Operation eingeführt. Daher hängt die Wahl zwischen den beiden Ansätzen von der konkret verwendeten RNG-Instanz ab.
Das obige ist der detaillierte Inhalt vonWie generiert man in Java zufällige BigInteger-Werte innerhalb eines benutzerdefinierten Bereichs?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!