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

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

Patricia Arquette
Patricia Arquetteasal
2024-12-03 05:46:09958semak imbas

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!

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