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。我以为情况正好相反。因此,负值是意料之中的事,但并非总是如此。
随机数的生成只是伪随机的,所以如果你只生成几个值,并且每次都用相同的常数为生成器种子,你可能只会遇到负值。
尝试使用当前系统时间设置种子,或者生成大量随机数,看看你是否真的只得到负值。
相关文章:
- 将一个小的 C 定义重写为"normal" C++函数
- "fast"或"normal"在"free(): invalid next size (fast)"中是什么意思?
- 用户定义文字的每个"normal"使用都是未定义的行为吗?
- 函数模板和函数之间奇怪的不一致"normal"
- 将"normal"标准::字符串转换为 utf-8
- 调用了基运算符而不是派生的one-Normal行为
- Direct X & HLSL - Normal ReComputing
- normal()总是给出负值
- 如何在 c++ 中的 Normal 或 Singleton 类中 GoogleTest 私有方法/枚举类
- 犰狳inplace_plus明显慢于"normal"加操作
- Eclipse CDT 将"normal folder"转换为"source folder",反之亦然
- Qt Qml in a normal Qt application
- 为什么派生类中复制/移动函数"normal"实现的行为会有所不同,具体取决于它们的定义方式?
- C++中是否有"normal"一元逻辑运算符
- OpenGL glVertexAttribPointer normal
- C++:标准::矢量::调整大小与 "normal"分配
- 命令行界面/C++。它与'normal' c++ 或 visual c# 有何不同?
- 释放内存时获得"Heap Corruption Detected: after Normal block"
- 将multi_key映射转换为连接多个键的"normal"映射
- std::atomic变量应该使用"normal"语法还是"load"和"store"?