我創建了一個模擬環境,其中包含幾個隨機部分。我從正態分佈,均勻分佈和對數正態分佈中繪製數字。但在大多數情況下,運行良好,但是,當我決定在彼此之後進行100次模擬時,出現錯誤: R6010 Abort()已被調用。 在我的控制檯中,我得到錯誤:mersenne_twister :: seed的參數無效。但是,我只使用標準的僞隨機數發生器rand()。在任何時候我都會打電話給mersene_twister。所以這可能是std :: normal_distribution的一個方法。mersenne twister的無效參數:: seed(C++)
此外,我不會爲什麼我的種子值在X迭代之後無效,而不是爲了第一次X迭代?
有沒有人有這個錯誤的經驗?有沒有人有任何建議如何解決這個
體育。 srand(時間(0))僅在main的開始處被調用一次。雖然所有隨機數都是在第二個類「random_num」中生成的。 P.s.s我知道這可能不是產生隨機數的最佳方式,但它對我的目的來說已經足夠了。
的要求對RNG的代碼:
double random_num::uniform(int lb, int ub)//Generate uniformly distributed random numbers with lowerbound lb and upperbound ub
{
//srand(time(0));
double number;
number =((double) rand()/(RAND_MAX+1)) * (ub-lb+1) + lb;
return number;
}
double random_num::normal(double mean, double var) //Generate normally distributed random numbers with mean and variance
{
//srand(time(0));
default_random_engine generator (rand());
normal_distribution<double> distribution(mean, var);
return distribution(generator);
}
double random_num::lognormal(double mean, double var, double offset)
{
//srand(time(0));
random_num dummy;
double random;
random = exp(dummy.normal(mean,var))-offset; //Calculate the 3 parameter lognormal
return random;
}
你是在一箇舊版本使用VS(如2012年之前)?調試模式下mt初始化的0錯誤似乎是一個已知問題。 – lip
你可以分享你實例化和使用std分發的代碼部分嗎? – lip
我添加了代碼部分 @lip我正在使用VS 2010 v10.0.30319.1 你在說什麼已知問題? – Siddler