Rumah >Java >javaTutorial >## Bagaimanakah anda menjana nilai BigInteger rawak dalam julat tertentu dalam Java?

## Bagaimanakah anda menjana nilai BigInteger rawak dalam julat tertentu dalam Java?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-25 07:18:29376semak imbas

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

Menjana Nilai Integer Besar Rawak dalam Java

Dalam senario di mana menjana integer rawak yang besar secara sewenang-wenangnya dalam julat tertentu adalah perlu, pendekatan biasa mungkin melibatkan penggunaan nextDouble() dan pendaraban keluaran mengikut had yang dikehendaki. Walau bagaimanapun, kaedah ini menjadi bermasalah untuk nilai yang melebihi 2^53, yang membawa kepada pengedaran tidak seragam.

Untuk mengatasi had ini, Java menyediakan kelas BigInteger, yang menawarkan pembina yang menjana nombor rawak yang diedarkan secara seragam antara 0 dan (2^numBits - 1), inklusif.

Menjana Nilai Rawak Dalam Julat Bukan Kuasa-2

Untuk menjana nilai rawak dalam julat 0 hingga n, di mana n bukan kuasa 2, gelung mudah boleh digunakan:

<code class="java">BigInteger randomNumber;
do {
    randomNumber = new BigInteger(upperLimit.bitLength(), randomSource);
} while (randomNumber.compareTo(upperLimit) >= 0);</code>

Pendekatan berulang ini memastikan pengedaran seragam dalam julat yang dikehendaki. Biasanya, hanya satu atau dua lelaran diperlukan.

Menghadkan Lelaran dalam Gelung

Untuk senario di mana penjana nombor rawak mahal dari segi pengiraan, bilangan lelaran dalam gelung boleh dihadkan seperti berikut :

<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>

Versi yang diubah suai ini berkemungkinan besar tidak memerlukan berbilang lelaran (kebarangkalian kurang daripada 2^100). Walau bagaimanapun, ia dikenakan penalti pengiraan disebabkan oleh operasi mod(). Oleh itu, ia disyorkan hanya jika penjana nombor rawak sangat perlahan.

Atas ialah kandungan terperinci ## Bagaimanakah anda menjana nilai BigInteger rawak dalam julat tertentu dalam Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn