gpt4 book ai didi

c++ - C++ std::uniform_real_distribution 应该只生成正数吗?

转载 作者:太空宇宙 更新时间:2023-11-04 14:36:18 26 4
gpt4 key购买 nike

我试图在 C++ 中生成一些随机 double (MSVC,虽然这对我来说不是太重要——我只是没有其他编译器可以测试),我注意到我的快速程序从未生成负数:

#include <iostream>
#include <random>
#include <ctime>

int main() {
std::mt19937 generator(clock());
std::uniform_real_distribution<double>
rand_dbl(std::numeric_limits<double>::min(),
std::numeric_limits<double>::max());

std::cout << "Double Limits: (" << std::numeric_limits<double>::min()
<< "," << std::numeric_limits<double>::max() << ")"
<< std::endl << std::endl;

int total_neg = 0;
for (int i=0; i<100; i++) {
double d = rand_dbl(generator);
if (d<0) total_neg++;
std::cout << d << " ";
}
std::cout << std::endl << std::endl
<< "Total negative random double is: " << total_neg << std::endl;

return 0;
}

无论我让它生成多少数字,它都不会生成负数。我明白为什么生成的大多数数字都在 10307 - 10308 范围内(这不是我想要的),但不明白为什么数字总是正数.我尝试了几种不同的生成器(默认,mt19937minstd_rand0),在这方面没有任何区别。

谁能解释为什么会这样?

最佳答案

您可以使用您提供的限制以这种方式进行设置。 std::numeric_limits<double>::min()给出最小的 positive double,您将其用作分布的下限。

关于c++ - C++ std::uniform_real_distribution<double> 应该只生成正数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32564418/

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