Rumah >pembangunan bahagian belakang >C++ >Mengapakah `rand() % 14` Menghasilkan Keputusan Tidak Seragam?
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!