Rumah > Java > javaTutorial > teks badan

Bagaimana untuk Menjana Nilai Integer Besar Rawak Teragih Seragam dalam Julat Tertentu di Jawa?

Linda Hamilton
Lepaskan: 2024-10-25 02:46:02
asal
809 orang telah melayarinya

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

Menjana Nilai Integer Besar Rawak dalam Java

Di Java, menjana integer rawak dalam julat yang ditentukan boleh mencabar apabila berurusan dengan nombor yang besar. Isu timbul apabila menggunakan kaedah konvensional seperti nextDouble() untuk penjanaan nombor rawak, kerana nilai yang dijana mungkin tidak diedarkan secara seragam melebihi had 253.

Menggunakan BigInteger Constructor

Untuk menangani perkara ini, kelas BigInteger menyediakan pembina yang membolehkan penciptaan nilai BigInteger rawak diedarkan secara seragam dalam julat bit tertentu.

Membina Pembina BigInteger:

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

Pembina ini mengambil dua parameter:

  • numBits: Menentukan bilangan bit untuk nilai yang dijana
  • rnd: Objek Rawak yang digunakan untuk menjana nilai rawak

Menjana Nilai Rawak Dalam Julat

Untuk menjana nilai rawak dalam julat bukan kuasa-2 0 hingga n (termasuk), gelung boleh digunakan:

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

Gelung ini berulang sehingga nilai rawak yang sah diperolehi. Ia memastikan bahawa nilai yang dijana diedarkan secara seragam dalam julat yang ditentukan.

Mengoptimumkan Kiraan Lelaran

Untuk mengurangkan bilangan lelaran gelung, penyelesaian yang lebih halus boleh digunakan .

<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>
Salin selepas log masuk

Pendekatan ini termasuk had pada bilangan lelaran untuk mengelakkan pelaksanaan gelung yang berlebihan. Ia mengimbangi kelajuan dan ketepatan, mengurangkan kemungkinan bilangan lelaran yang banyak.

Atas ialah kandungan terperinci Bagaimana untuk Menjana Nilai Integer Besar Rawak Teragih Seragam dalam Julat Tertentu di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!