1

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

4

2 回答 2

2

我现在才读到您将均值设置为 0,将 sigma 设置为 8。我认为情况正好相反。所以负值是意料之中的,但并非总是如此。

随机数的生成只是伪随机的,因此如果您只生成几个值并在每次生成器时使用相同的常量,您可能只会遇到负值。

尝试使用当前系统时间设置种子或生成大量随机数,看看你是否真的只得到负值。

于 2012-07-16T01:23:33.403 回答
2

你不要简单地调用normal(double mean, double sigma).
相反, call是平均值,double r8_normal ( double a, double b, int &seed )是sigma,并初始化随机数生成器。abseed

我能够在您提供的链接中编译和使用 Normal 库。
我下载了 normal.cpp 和 normal.hpp。这些是旧文件,主要是 Fortran 的翻译。我必须通过在前两个声明中添加和更改to
来修改 normal.hpp,以使其在低警告级别为我编译。#include <complex>complexstd::complex

然后我创建了一个测试驱动程序:

#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

对于mean = 0.0,sigma = 8.0,一切看起来都对我有用。

于 2012-07-16T01:53:28.637 回答