【发布时间】:2014-07-26 13:48:51
【问题描述】:
我目前正在扩展一个严重依赖随机正态分布数的模拟模型。目前它使用std::normal_distribution,但它太慢了。
有没有办法实现快速随机正态分布?只要遵循正态分布,这些值就不必是唯一的。
【问题讨论】:
-
您很可能不会显着超越您的标准库供应商。唯一性与正态分布相矛盾。
-
std::normal_distribution是一个发行版,而不是一个生成器。您将哪个生成器和哪个编译标志用于哪个代码?当然,如果数字的质量不是那么重要,您可以回退到非常简单的算法,例如使用r=++i%6。 -
@BaummitAugen 你说得对,唯一性与正态分布相矛盾。当我说这句话时,我的意思是,0.5556 或 0.5559 对我来说并不重要,如果它有助于计算,我可以承受失去一些精度。
-
@phresnel 我使用 mt19937 (mersenne twister) 作为生成器,使用 -O3 -std=c++11 作为编译标志。回退到另一个生成器并不是一个真正的选择,我从其他人那里继承了模型,我不想开始使用模型参数。
-
我想到的一个可能的解决方案是预先计算 10,000 个点并将它们存储在一个查找表中。然后在必要时从查找表中随机选择。
标签: c++ random normal-distribution