Rumah > pembangunan bahagian belakang > C++ > Mengapakah `rand() % 14` Kadangkala Hanya Mengembalikan 6 atau 13?

Mengapakah `rand() % 14` Kadangkala Hanya Mengembalikan 6 atau 13?

DDD
Lepaskan: 2024-11-25 10:34:11
asal
343 orang telah melayarinya

Why Does `rand() % 14` Sometimes Only Return 6 or 13?

Rand() % 14: Mendedahkan Misteri Nilai Berulang

Dalam pengaturcaraan, fungsi rand() biasanya digunakan untuk menjana rawak nombor. Walau bagaimanapun, sesetengah pengguna telah menghadapi isu yang menarik di mana ungkapan rand() % 14 secara konsisten menghasilkan hanya 6 atau 13.

Untuk memahami tingkah laku ini, mari kita mendalami cara kerja rand(). Ia menggunakan algoritma Mersenne Congruential Generator (MCG) Apple, yang melibatkan pengganda tertentu. Malangnya, pengganda ini boleh dibahagi dengan 7, menyebabkan tingkah laku tidak menentu apabila menjana nombor rawak dalam julat terhad.

Secara khusus, nombor rawak pertama yang dijana selepas memanggil srand() akan mempamerkan hanya satu bit modulo entropi 14. Ini bermakna ia boleh menganggap hanya dua nilai yang mungkin: 6 atau 13.

Untuk menyelesaikan isu ini, ada penyelesaian mudah. Hanya panggil rand() beberapa kali dan buang keputusan untuk memperkenalkan kerawak. Ini memastikan bahawa nombor rawak pertama yang digunakan dalam rand() % 14 tidak dipengaruhi oleh pembenihan awal.

Atas ialah kandungan terperinci Mengapakah `rand() % 14` Kadangkala Hanya Mengembalikan 6 atau 13?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan