normal()总是给出负值

时间:2012-07-15 23:13:28

标签: c++ normal-distribution

我正在使用normal(mean, sigma)为正态分布生成随机数,包含均值和西格玛。我的sigma是8db,平均值是0.但是当我正常时(意思是sigma),我总是得到负值。有什么方法可以得到这个正数吗?

2 个答案:

答案 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,一切看起来都适合我。