Pembenihan Mt19937 PRNG yang Ringkas, Mudah Alih dan Teliti dalam C
Walaupun kekurangan penggunaan std::random_device dan masa(NULL) untuk pembenihan, adalah mungkin untuk mencapai yang teguh dan mudah alih penyelesaian:
Pembenihan Berasaskan CSPRNG
Untuk mengelakkan pengehadan std::random_device, kita boleh menggunakan CSPRNG seperti:
Pembenihan Minimum Fungsi:
Fungsi merentas platform berikut menyediakan pembalut minimum di sekeliling pelbagai CSPRNG khusus OS:
size_t sysrandom(void* dst, size_t dstlen) { #ifdef _WIN32 // Windows CSPRNG implementation #elif defined(__linux__) // Linux CSPRNG implementation #else // POSIX CSPRNG implementation #endif }
Pembenihan Cekap:
Dengan sysrandom tersedia, menyemai PRNG mt19937 menjadi:
std::uint_least32_t seed; sysrandom(&seed, sizeof(seed)); std::mt19937 gen(seed);
Nota Tambahan:
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membenihkan Mt19937 PRNG dengan Selamat dalam C Merentasi Platform Berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!