visual Каждая симуляция нормального распределения одинакова (C ++)

Я пишу код для имитации нормального распределения в C ++. Но каждый раз кажется, что результат один и тот же. Мой вопрос: в чем причина этого явления и как его исправить? У меня никогда не было этой проблемы с Python. Любые ссылки очень ценятся.

// Simulation.cpp : Defines the entry point for the console application.
#include "stdafx.h"#include <iostream>
#include<random>

void main(){

// create default engine as source of randomness
// The maxtime we do expriements is 10000
// Record to the sum of the maxtimes sample
std::default_random_engine dre;
const int maxtimes = 10000;
double sum = 0.0 ;
// Generate the normal distribution witn mean 0 and variaiton 1.
std::normal_distribution<double> distribution(0.0, 1.0);
// Output the result and Record their sum.
for( int i=0; i<maxtimes; ++i)
{

double x = distribution(dre);
std::cout << x << ":";
sum +=x;
x =0.0;
}
std::cout<<std::endl;
std::cout <<" The average sum is: " << sum/10000 <<std::endl;
}

Мой код работает в Visual C ++ 2010.

0

Решение

Вы создаете default_random_engine каждый раз из одного и того же начального числа: поскольку вы не предоставляете ему начальное число для конструирования, оно просто использует значение по умолчанию, которое одинаково при каждом запуске, поэтому вы получаете одинаковые «случайные» числа при каждом запуске. http://www.cplusplus.com/reference/random/linear_congruential_engine/linear_congruential_engine/

использование random_device посеять генератор.

std::default_random_engine dre(std::random_device()());
3

Другие решения

Пытаться:

std::random_device mch;
std::default_random_engine generator(mch());
std::normal_distribution<double> distribution(0.0, 1.0);
0

По вопросам рекламы [email protected]