我正在使用normal(mean, sigma)
生成具有均值和 sigma 的正态分布的随机数。我的 sigma 是 8db,mean 是 0。但是当我正常时,我总是得到负值(mean,sigma)。有什么办法可以得到正数吗?
问问题
277 次
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,并初始化随机数生成器。a
b
seed
我能够在您提供的链接中编译和使用 Normal 库。
我下载了 normal.cpp 和 normal.hpp。这些是旧文件,主要是 Fortran 的翻译。我必须通过在前两个声明中添加和更改to
来修改 normal.hpp,以使其在低警告级别为我编译。#include <complex>
complex
std::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 回答