Mengapa perpustakaan rawak baharu lebih baik daripada std::rand()?
Pengenalan
Fungsi std::rand() telah lama menjadi penjana nombor rawak dalam C , bagaimanapun, perpustakaan std::rand yang lebih baharu menawarkan banyak kelebihan berbanding std::rand(), termasuk:
1. Random yang Dipertingkatkan:
Std::rand() menggunakan penjana kongruen linear (LCG) yang mudah, yang boleh diramal dan terdedah kepada bias statistik Perpustakaan baharu ini menyediakan akses kepada penjana nombor rawak (PRG) berkualiti tinggi, seperti Mersenne Twister, dengan pengedaran seragam yang lebih baik dan tempoh yang lebih lama.2. Enkapsulasi Keadaan:
Std::rand() menggunakan keadaan global, menjadikannya sukar untuk digunakan dalam persekitaran berbilang benang dan memastikan kebolehhasilan semula perpustakaan merangkum keadaan dalam objek, membenarkan penggunaan selamat-benang dan urutan yang boleh dihasilkan semula, yang membawa kepada tingkah laku yang tidak konsisten. . Sebenarnya, beberapa pelaksanaan std::rand() sangat dioptimumkan untuk prestasi Walau bagaimanapun, pengoptimuman ini selalunya dibuat dengan mengorbankan kerawanan jika lebih penting kepada anda daripada prestasi, maka perpustakaan baharu adalah pilihan yang lebih baik .Contoh
Untuk menunjukkan perbezaan, pertimbangkan percubaan berikut:Menjalankan eksperimen ini akan menunjukkan bahawa perpustakaan rawak baharu menghasilkan set nombor yang lebih sekata dengan julat yang lebih luas daripada std::rand().
KesimpulanManakala std::rand() adalah mudah dan berprestasi pilihan untuk menjana nombor rawak, ia mempunyai had dari segi rawak dan berbilang benang Pustaka std::random baharu menangani batasan ini, memberikan pendekatan yang lebih mantap dan boleh dipercayai untuk menjana nombor rawak dalam C ..
Atas ialah kandungan terperinci Mengapakah perpustakaan rawak C baharu merupakan pilihan yang lebih baik daripada std::rand()?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!