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

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

DDD
DDDasal
2024-11-25 10:34:11442semak imbas

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!

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