gpt4 book ai didi

c++ - uniform_real_distribution 不统一

转载 作者:IT老高 更新时间:2023-10-28 12:52:16 27 4
gpt4 key购买 nike

请帮助我理解这一点。运行代码段后:

random_device randomEngine;
mt19937 generatorEngine(randomEngine());
uniform_real_distribution<double> unifRandomValue(
numeric_limits<double>::min(),
numeric_limits<double>::max());

double test[1000];
for (int i{ 0 }; i < 1000; ++i) {
test[i] = unifRandomValue(generatorEngine);
}

为什么每个生成的值都在 [1.0E306, 1.8E308] 范围内?我期待一个从接近 0 到 double 类型的最大值均匀分布的随机值。

提前致谢!


这是一个更完整的例子:

const size_t size{ 1000 };
std::random_device randomEngine;
std::mt19937 generatorEngine(randomEngine());
std::uniform_real_distribution<double> unifRandomValue(
std::numeric_limits<double>::min(),
std::numeric_limits<double>::max());

std::array<double, size> test;
for (int i{ 0 }; i < size; ++i) {
test[i] = unifRandomValue(generatorEngine);
}

auto minMaxIt = std::minmax_element(test.begin(), test.end());

// average without overflow
double average{ 0.0 };
for (int i{ 0 }; i < size; ++i) {
average += test[i] / size;
}

std::cout << "min value : " << *minMaxIt.first << std::endl;
std::cout << "max value : " << *minMaxIt.second << std::endl;
std::cout << "average : " << average << endl;

// one possible output (they are all similar)
// min value : 1.73361e+305
// max value : 1.79661e+308
// average : 8.78467e+307

最佳答案

嗯,这就是 统一生成器的属性:

90% 的值将处于您指定的最高数量级。

想得更小;考虑从 0 到 99 的整数范围:90% 的图纸将有 2 位数字。

关于c++ - uniform_real_distribution 不统一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46771440/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com