gpt4 book ai didi

c++ - 使用 C++11 随机库生成随机数

转载 作者:IT老高 更新时间:2023-10-28 11:33:59 28 4
gpt4 key购买 nike

正如标题所示,我正在尝试找出一种使用新的 C++11 <random> 生成随机数的方法。图书馆。我已经用这段代码试过了:

std::default_random_engine generator;
std::uniform_real_distribution<double> uniform_distance(1, 10.001);

我的代码的问题是每次编译和运行它时,它总是生成相同的数字。所以我的问题是随机库中的哪些其他函数可以在真正随机的同时实现这一点?

对于我的特定用例,我试图获取 [1, 10] 范围内的值

最佳答案

来自 Microsoft 的 Stephan T. Lavavej(STL) 在 Going Native 上发表了关于如何使用新的 C++11 随机函数以及为什么不使用 rand() 的演讲。在其中,他包含了一张幻灯片,基本上可以解决您的问题。我已经从下面这张幻灯片中复制了代码。

你可以看到他的完整谈话here:

#include <random>
#include <iostream>

int main() {
std::random_device rd;
std::mt19937 mt(rd());
std::uniform_real_distribution<double> dist(1.0, 10.0);

for (int i=0; i<16; ++i)
std::cout << dist(mt) << "\n";
}

我们使用 random_device 一次为名为 mt 的随机数生成器播种。 random_device()mt19937 慢,但它不需要播种,因为它从您的操作系统请求随机数据(这些数据将来自不同的位置,例如 RdRand)。


查看 this question / answer ,似乎 uniform_real_distribution 返回了 [a, b) 范围内的数字,您想要 [a, b] 。为此,我们的 uniform_real_distibution 实际上应该如下所示:

std::uniform_real_distribution<double> dist(1, std::nextafter(10, DBL_MAX));

关于c++ - 使用 C++11 随机库生成随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19665818/

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