Rumah > pembangunan bahagian belakang > C++ > Mengapakah `rand() % 14` Menghasilkan Keputusan Tidak Seragam?

Mengapakah `rand() % 14` Menghasilkan Keputusan Tidak Seragam?

Patricia Arquette
Lepaskan: 2024-12-03 05:46:09
asal
962 orang telah melayarinya

Why Does `rand() % 14` Produce Non-Uniform Results?

Rand() % 14 Menjana Nilai Tidak Seragam

Dalam percubaan untuk menjana nilai rawak dalam julat tertentu, sesetengah pengaturcara mungkin menghadapi tingkah laku luar biasa apabila menggunakan fungsi rand(). Satu isu biasa yang dilaporkan ialah rand() % 14 secara konsisten mengembalikan nilai 6 atau 13.

Untuk memahami fenomena ini, adalah penting untuk menyelidiki algoritma asas rand(). Pelaksanaan khusus yang digunakan pada mesin Apple adalah berdasarkan Penjana Multiply-with-Carry (MWC). Malangnya, kelemahan penjana ini ialah kebolehbahaginya dengan 7, khususnya nilai pengganda 16807.

Akibatnya, bit tertib rendah beberapa nombor rawak pertama yang dijana serta-merta selepas memulakan srand() telah terhad entropi. Dalam kes rand() % 14, bit tertib rendah akan sentiasa mempunyai nilai yang sama, yang membawa kepada hanya dua kemungkinan hasil: 6 atau 13.

Untuk mengurangkan isu ini, penyelesaian yang mudah adalah dengan membuang beberapa nombor rawak pertama yang dijana selepas permulaan. Dengan menggunakan rand() beberapa kali tambahan tanpa menggunakan keputusan, keadaan dalaman algoritma menjadi lebih huru-hara dan pengagihan seragam nilai dipulihkan.

Atas ialah kandungan terperinci Mengapakah `rand() % 14` Menghasilkan Keputusan Tidak Seragam?. 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