我正在尝试构建一个简单的随机数生成器,但我想确保 random_device 正常工作。我从以下代码开始:
#include <random>
#include <chrono>
class Generator {
public:
Generator()
:
m_DeviceSeed(rd()),
m_TimeSeed(std::chrono::high_resolution_clock::now().time_since_epoch().count()),
rng(m_DeviceSeed)
{
if (rd.entropy() == 0.0) {
rng.seed((unsigned)m_TimeSeed);
}
}
private:
//Vars
std::random_device rd;
unsigned int m_DeviceSeed;
unsigned long long m_TimeSeed;
std::mt19937 rng;
};
我已经看到“std::chrono::high_resolution_clock::now().time_since_epoch().count()”被推荐为 random_device 的替代品,我认为检查熵可以让我将其用作后备;但是,这是用 Visual Studio 编写的,显然这意味着熵总是显示 32,无论它是否正确。
所以,我的问题是:在没有测试熵的情况下播种 std::mt19937 的最可靠方法是什么?chrono 更好还是 random_device 更好?还是某种组合,或完全是其他选择?
基于此:VS2010 中 random_device 的实现?
在大多数情况下,random_device 似乎是播种或生成种子序列的安全选择,但我想确定一下。