gpt4 book ai didi

c++ - 如何使用 Linux getrandom 系统调用生成一个范围内的随机数?

转载 作者:太空宇宙 更新时间:2023-11-04 12:38:28 24 4
gpt4 key购买 nike

我有如下一段代码

#include <unistd.h>
#include <sys/syscall.h>
#include <linux/random.h>

unsigned long int s;
syscall(SYS_getrandom, &s, sizeof(unsigned long int), 1);
std::cout << s << std::endl;

根据 GETRANDOM(2)它从/dev/random 或/dev/urandom 返回具有高熵的随机数。

我如何使用它返回一个范围内的数字?我使用的范围是 [0 - 2^125] [0 - 125^2]

最佳答案

假设 SYS_getrandom 使用的是 true 生成器(而不是伪随机生成器),在这种情况下,您最好的选择是认识到 125 * 125 非常接近到 2 的 14 次方,然后从那里开始。

因此传递一个 16 位的 unsigned 作为缓冲区,从生成器中读取 14 位,并对结果执行任何必要的按位运算。这将为您提供 0 到 16383 之间的数字。

如果数字超出所需范围,则重新采样:概率约为 5%。

使用伪随机数生成器,重采样可能会引入统计异常(比平均值更高的时刻消失),但使用真正的生成器则不会。

关于c++ - 如何使用 Linux getrandom 系统调用生成一个范围内的随机数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40883938/

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