如何在C或C++中轻松生成服从正态分布的随机数?

我不想使用Boost.

我知道Knuth详细讨论了这个问题,但我现在手头没有他的书.

推荐答案

计算generate Gaussian-distributed numbers from a regular RNG的方法有很多种.

Box-Muller transform是常用的.它正确地产生正态分布的值.算术很简单.您生成两个(均匀的)随机数,通过对它们应用公式,可以得到两个正态分布的随机数.返回一个,将另一个保存为随机数供下一次请求使用.

C++相关问答推荐

为指针 struct 创建宏

为什么这个C程序代码会产生以下结果?

使用GOTO从多个嵌套循环C继续

我可以在C中声明不同长度数组的数组而不带变量名吗?

如何知道我是否从非阻塞套接字读取所有内容

字符是否必须转换为无符号字符,然后才能与getc家族的返回值进行比较?

当输入负数时,排序算法存在问题

如何识别Linux中USB集线器(根)和连接到集线器(根设备)的设备(子设备)?

如何使用_newindex数组我总是得到错误的参数

为什么未初始化的 struct 的数组从另一个数组获取值?

如果格式字符串的内存与printf的一个参数共享,会发生什么情况?

C-try 将整数和 struct 数组存储到二进制文件中

*S=0;正在优化中.可能是GCC 13号虫?或者是一些不明确的行为?

在printf()中用%.*S格式填充长度为0的字符串是否会调用任何UB?如果是,是哪一个?

在Ubuntu上使用库部署C程序的最佳实践

如何编写postgresql支持函数

';malloc():损坏的顶部大小';分配超过20万整数后

如何打印循环调度问题的时间表

使用 GCC 将一个函数中初始化的 struct 体实例通过指针传递到 C 中的另一个函数会产生不同的结果

GDB 用内容初始化数组