C++ 均匀实分布是不均匀的

C++ 均匀实分布是不均匀的,c++,random,C++,Random,请帮我理解这一点。运行代码段后: random_device randomEngine; mt19937 generatorEngine(randomEngine()); uniform_real_distribution<double> unifRandomValue( numeric_limits<double>::min(),

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

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

这就是均匀生成器的特性:

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


小心谨慎;考虑整数范围0到99包含:90%的图纸将有2个数字。< /P>你怎么知道他们在这个范围内?在分配值之前,您是否在调试器中查看了
test
的值?请在打印值的地方做一个标记。您是否尝试过计算平均值、标准偏差等?当然可能会违反直觉。这是给我的。在我看来是统一的。准确地说,没有统一的真实分布。那么,你的生成器能生成的实际最大数量是多少呢?这个例子非常适合直觉,在处理这个问题时,直觉往往失败。这让我想起了古老的计数之谜:青蛙每天都会产卵,每次产卵的数量都会翻一番。据说他们花了10天时间才把池塘灌满。他们花了多长时间才把它填到一半?同样的基本想法:)谢谢大家。芭丝谢芭,你的答案很简单而且很直观。我并没有真正考虑过这一点,也没有立即得出我这一部分的错误结论。这是显而易见的!再次感谢。@StoryTeller不得不说,在我意识到自己愚蠢之前,我以为这是世界上最简单的谜语。@StoryTeller,谜语。@CarstenS-我想知道那些水里有什么东西能让事物繁殖得这么快;)
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