C での Mt19937 PRNG の簡潔、移植可能、および徹底的なシード
std::random_device と time(NULL) の使用の欠点にもかかわらず播種の場合、堅牢でポータブルなシステムを実現できます。解決策:
CSPRNG ベースのシーディング
std::random_device の制限を回避するには、次のような CSPRNG を利用できます:
最小限のシード関数:
次のクロスプラットフォーム関数は、さまざまな OS 固有の CSPRNG の最小限のラッパーを提供します:
size_t sysrandom(void* dst, size_t dstlen) { #ifdef _WIN32 // Windows CSPRNG implementation #elif defined(__linux__) // Linux CSPRNG implementation #else // POSIX CSPRNG implementation #endif }
効率的なシード:
利用可能なシステムランダムで、mt19937 PRNG をシードします
std::uint_least32_t seed; sysrandom(&seed, sizeof(seed)); std::mt19937 gen(seed);
追加メモ:
以上が異なるプラットフォーム間で C の Mt19937 PRNG を安全にシードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。