normal()总是给出负值

normal() is always giving negative value

本文关键字:normal      更新时间:2023-10-16

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

您不能简单地调用normal(double mean, double sigma)
相反,调用double r8_normal ( double a, double b, int &seed ),其中a是平均值,b是西格玛,seed初始化随机数生成器。

我能够编译并使用您提供的链接中的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。

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

随机数的生成只是伪随机的,所以如果你只生成几个值,并且每次都用相同的常数为生成器种子,你可能只会遇到负值。

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