gpt4 book ai didi

c++ - 默认构造的 std::random_device 不返回随机数

转载 作者:行者123 更新时间:2023-12-01 14:29:08 28 4
gpt4 key购买 nike

我尝试运行一个来自 cppreference 的简单示例关于std::random_device , 但在函数调用线上 d(rd1)程序进入无限循环,永不返回。

代码如下:

#include <iostream>
#include <random>

int main()
{

std::uniform_int_distribution<int> d(0, 10);

std::random_device rd1;
for(int n = 0; n < 10; ++n)
std::cout << d(rd1) << ' ';
std::cout << '\n';
}

经过一些检查,我发现函数 std::random_device::operator()总是返回值 4294967295 导致 std::uniform_int_distribution<IntType>::operator()进入无限循环。

如果我用 "rdrand" 显式调用构造函数或 "/dev/urandom"程序运行良好,但使用 "rdseed"这是同样的错误结果。此外,如果我链接到 llvm 的 libc++,该示例将正常工作。值得注意的是,在 Ubuntu 16 和 18 上它运行良好,但在 Ubuntu 20 和 Linux Mint 20 上我遇到了这个问题。

为什么默认构造的随机器不起作用?

uname -a输出:

Linux my-pc 5.4.0-42-generic #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

以及有关系统的更多信息:lscpu , lshw

最佳答案

Why is the default constructed random device not working?

可能与实现质量有关,或与执行环境有关,或两者兼而有之。标准当然不能保证这种行为。

一般来说,人们可能不应该依赖于 std::random_device 的随机性。至少,将它与另一个种子和/或伪随机数结合起来。

关于c++ - 默认构造的 std::random_device 不返回随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63037126/

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