我正在使用normal(mean, sigma)
为正态分布生成随机数,包含均值和西格玛。我的sigma是8db,平均值是0.但是当我正常时(意思是sigma),我总是得到负值。有什么方法可以得到这个正数吗?
答案 0 :(得分:2)
我现在才读到你将平均值设为0,将sigma设置为8.我认为这是另一回事。因此,预计会出现负值,而不是所有时间。
随机数生成只是伪随机生成,因此,如果您只生成一些值,并且每次只有经历负值时生成具有相同常量的生成器。
尝试使用当前系统时间设置种子或生成大量随机数,以查看您是否真的只能得到负值。
答案 1 :(得分:2)
您不是简单地致电normal(double mean, double sigma)
相反,请致电double r8_normal ( double a, double b, int &seed )
,其中a
为平均值,b
为sigma,seed
初始化随机数生成器。
我能够在您提供的link中编译和使用Normal库
我下载了normal.cpp和normal.hpp。这些是旧文件,主要是Fortran的翻译
我必须在前两个声明中添加#include <complex>
并将complex
更改为std::complex
来修改normal.hpp,以便在低警告级别为我编译。
然后我创建了一个测试驱动程序:
#include "normal.hpp"
#include <iostream>
int main() {
int seed = 123;
std::cout << r8_normal (0.0, 8.0, seed) << '\n'
<< r8_normal (0.0, 8.0, seed) << '\n'
<< r8_normal (0.0, 8.0, seed) << '\n'
<< r8_normal (0.0, 8.0, seed) << '\n'
<< r8_normal (0.0, 8.0, seed) << '\n';
}
给出了这个输出
8.19933
1.45505
-2.42428
26.9111
12.8398
对于平均值= 0.0,sigma = 8.0,一切看起来都适合我。