Rumah > Java > javaTutorial > teks badan

Bagaimana untuk Menjana Nilai BigInteger Rawak dalam Julat Tertentu di Jawa?

Barbara Streisand
Lepaskan: 2024-10-25 03:51:45
asal
744 orang telah melayarinya

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

Menjana Nilai Integer Besar Rawak dalam Julat Tertentu dalam Java

Dalam pengaturcaraan Java, menjana nilai BigInteger rawak dalam julat yang ditetapkan memerlukan pertimbangan yang teliti untuk memastikan pengedaran seragam dan kecekapan pengiraan . Seseorang pada mulanya mungkin menggunakan untuk mendarab hasil nextDouble dengan had atas, tetapi pendekatan ini menjadi bermasalah apabila berurusan dengan nilai melebihi had ketepatan berganda (253).

Untuk menangani perkara ini isu, kelas BigInteger menyediakan pembina yang sesuai:

public BigInteger(int numBits, Random rnd)
Salin selepas log masuk

Pembina ini menjana BigInteger rawak dalam julat 0 hingga (2numBits - 1), memastikan pengedaran seragam. Walau bagaimanapun, cabaran kekal dalam mendapatkan nilai dalam julat yang dikehendaki (0 hingga n), di mana n tidak semestinya kuasa 2.

Penyelesaian:

Satu yang berkesan penyelesaiannya ialah menggunakan gelung:

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

Secara purata, gelung ini akan dilaksanakan kurang daripada dua kali, memastikan pengedaran seragam.

Pengoptimuman untuk RNG Mahal:

Jika RNG yang dipilih adalah intensif secara pengiraan, bilangan lelaran boleh dihadkan:

<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

Versi ini mengurangkan dengan ketara kemungkinan gelung dilalui lebih daripada sekali (kurang daripada 1 dalam 2100). Walau bagaimanapun, operasi mod() adalah mahal dari segi pengiraan, jadi pengoptimuman ini mungkin hanya bermanfaat jika tika RNG sangat perlahan.

Atas ialah kandungan terperinci Bagaimana untuk Menjana Nilai BigInteger Rawak 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!