私はcppreference.comで、通常の分散型の乱数を生成するための例を見て、これを取得するためのコードを少しリファクタリングた:私はこれを実行するたびに乱数ジェネレータをシードする方法は?
しかし#include <iostream>
#include <random>
struct MyNormalDistribution {
static double getRandomNumber(double mean,double std_dev){
return std::normal_distribution<>(mean,std_dev)(MyNormalDistribution::generator);
}
private:
static std::random_device rand;
static std::mt19937 generator;
};
std::random_device MyNormalDistribution::rand;
std::mt19937 MyNormalDistribution::generator = std::mt19937(MyNormalDistribution::rand());
int main(int argc, char *argv[]) {
for (int t=0;t<10;t++){
std::cout << MyNormalDistribution::getRandomNumber(0,10) << std::endl;
}
}
は、私は数字の同じシーケンスを取得します。いくつかのばかげたミスがあるのか、あるいはcppreferenceの例に適切なシードが含まれていないのでしょうか?
正しくシードするにはMyNormalDistribution
?
http://en.cppreference.com/w/cpp/numeric/random/mersenne_twister_engine/seed –
ほとんどのプラットフォーム/システムには、暗号で安全な疑似乱数ジェネレータ([CSPRNG](https://en.wikipedia) .org/wiki/Cryptographically_secure_pseudorandom_number_generator))、本当のRNGではなく、本質的に非決定論的です。それらはユーザによってシードされる必要はなく、システム放射能の発生に基づいて継続的にエントロピーが追加される。 – zaph