生成不同范围的随机双精度数

时间:2013-05-24 00:39:11

标签: c++ performance random c++11

在我的程序中,我需要重复生成随机双打(数百万次),并且有几个变量具有平坦分布,但是范围不同。目前这就是我的工作:

double w, v, k;
double wmax = 0.5;
double vmax = 1.0;

std::random_device rd;
std::default_random_engine dre(rd());
std::uniform_real_distribution<double> wRand(-wmax, wmax);
std::uniform_real_distribution<double> vRand(-vmax, vmax);
std::uniform_real_distribution<double> kRand(0.0, 1.0);

w = wRand(dre);
v = vRand(dre);
k = kRand(dre);

这是一种正确的方式,或者有一个分布并从中构建所有数字更好吗?我对性能问题非常谨慎,我觉得有一个发行版和几个算术运算会更快。会吗?在这种情况下随机数的比较质量怎么样?

1 个答案:

答案 0 :(得分:1)

我的建议是使用具有三个算术运算的单个分布来适当地缩放它们。它将使用更少的内存,算术运算将很快。

但是,您的整体表现将更多地取决于您如何构建循环并最大限度地减少分支错误预测。 See this question