我正在使用normal(mean, sigma)生成均值和sigma的正态分布随机数。我的sigma是8db,平均值是0。但是当我做正态(均值,sigma)时,我总是得到负值。我有什么办法可以得到正数?

最佳答案

您不只是简单地调用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,西格玛= 8.0。

关于c++ - normal()始终为负值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11496419/

10-16 04:46