在不同范围内生成随机双精度

Generating random doubles in different ranges

本文关键字:随机 双精度 范围内      更新时间:2023-10-16

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

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);

这是一种合适的方法吗?还是有一个分布并从它构造所有的数更好?我对性能问题非常谨慎,我觉得用一个分布和几个算术运算会更快。将它吗?在这种情况下,随机数的相对质量如何呢?

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

但是您的整体性能将更多地取决于您如何构建循环和最小化分支错误预测。参见这个问题