Mengapa perpustakaan rawak baharu lebih baik daripada rand()?
Kebimbangan kontemporari mengenai rand() telah mencetuskan perbincangan tentang penggunaan nombor rawak unggul prosedur penjanaan (RNG) berdasarkan paradigma pengedaran enjin, berbanding dengan std::rand() konvensional dan pendekatan modulo. Untuk mendapatkan pemahaman langsung tentang kelemahan rand(), percubaan pantas telah dijalankan.
Dua fungsi telah dicipta, getRandNum_Old() dan getRandNum_New(), memanfaatkan std::rand() dan std: :mt19937 dengan std::uniform_int_distribution masing-masing, untuk menjana nombor rawak antara 0 dan 5. 960,000 nombor rawak telah dijana menggunakan setiap kaedah, dan kekerapan setiap nombor (0-5) telah direkodkan. Sisihan piawai berfungsi sebagai metrik, dengan nilai yang lebih rendah menunjukkan taburan yang lebih seragam. Proses ini diulang 1000 kali, dan masa yang diambil untuk setiap lelaran diukur.
Anehnya, pengedaran gulungan adalah serupa dalam kedua-dua kaedah. Kaedah baru adalah lebih kurang 4x lebih perlahan. Nampaknya peningkatan kelajuan datang dengan kos peningkatan minimum dalam kualiti.
Walau bagaimanapun, perbezaan penting terletak pada pelaksanaan RNG itu sendiri. Banyak pelaksanaan rand() menggunakan Penjana Kongruen Linear (LCG), yang biasanya bukan yang paling teguh. Walaupun kelazimannya, mereka biasanya menghasilkan keputusan yang boleh diterima dalam ujian asas seperti yang dijalankan.
Kekurangan pelaksanaan subpar rand() termasuk rawak rendah dalam bit tertib rendah, tempoh pendek, RAND_MAX rendah dan korelasi antara berturut-turut pengekstrakan. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa pengehadan ini tidak wujud kepada rand() API.
Isu asas dengan rand() tertumpu pada:
Baharu
Dari segi prestasi, std::mt19937 (digunakan oleh std::rand() dalam ujian anda) adalah lebih perlahan daripada std::minstd_rand (LCG juga tersedia dalam perpustakaan
Atas ialah kandungan terperinci Mengapakah perpustakaan `` dalam C lebih disukai daripada `rand()`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!