c++ - 在 gmp 任意精度上生成正态分布

标签 c++ c algorithm random gmp

所以,我正在尝试使用 gmp对于我正在做的一些计算,在某些时候我需要从正态分布中生成一个伪随机数 (prn)。

由于 gmp 有一个统一的随机变量,这已经很有帮助了。但是,我发现很难选择应该使用哪种方法从统一的方法生成正态分布。实际上,我的问题是 gmp 只有简单的操作,所以例如我不能使用 cos 或 erf 评估,因为我必须自己实现。

我的问题是我可以在多大程度上从 gmp 上的正态分布生成 prn,如果这非常困难,是否有任何已经实现正态分布的任意精度库。

作为无效方法的两个示例(从 this question 检索):

Ziggurat algorithm使用 f 的评估,在这种情况下它是一个非整数指数,因此不受 gmp 支持。

Box–Muller Transform使用 gmp 不支持的 cos 和 sin。

最佳答案

Marsaglia polar method如果您的图书馆有 ln,就可以了。

关于c++ - 在 gmp 任意精度上生成正态分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10982661/

相关文章:

c++ - 在 llvm 中用 Undef 值替换对删除指令的所有使用?

c++ - FFmpeg:无法设置/获取/查找 HLS 选项

c++ - 迭代器 openMP 的循环

c - 来自 gcc 编译器的错误

performance - 任何可能的正数但可能接近于零的随机函数

vb.net - 使用多个线程以加快执行速度

c - 使用埃拉托斯特尼筛法求素数之和

c++ - 如何使用没有返回值的 (eigen) unaryExpr 和 lambda 函数?

c - 当链接源中的函数定义与 header 中的函数原型(prototype)不同时,gcc 不会发出警告

c - 从 C 语言的 ASCII 格式文件中解析数据