c 语言中生成随机数-ag捕鱼王app官网

c 语言中生成随机数

作者:迹忆客 最近更新:2023/05/05 浏览次数:

本文将介绍几种如何在 c 语言中生成随机数的方法。


使用 randsrand 函数在 c 语言中生成随机数

rand 函数实现了一个伪随机数生成器,可以提供一个范围为 [0, rand_max] 的整数,其中 rand_max 在现代系统中是 231-1。注意,rand 函数背后的生成器算法是确定性的。因此,它的种子位应该是随机位。

srand 函数用于为伪随机数生成器提供种子,随后对 rand 的调用将产生随机整数序列。在缺点方面,rand 的实现不希望产生均匀的随机位。因此,rand 函数不建议在密码学高度敏感的应用中使用。下面的例子用当前时间的值作为生成器的种子,这不是一个好的随机性来源。

#include #include #include #include #define max 100000
#define size 100
#define nums_to_generate 10
int main() {
    srand(time(null));
    for (int i = 0; i < nums_to_generate; i){
        printf("%d\n", rand() % max);
    }
    exit(exit_success);
}

输出:

85084
91989
85251
85016
43001
54883
8122
84491
6195
54793

使用 randomsrandom 函数在 c 语言中生成随机数

c 标准库中可用的另一种伪随机伪随机数生成器是在 random 函数下实现的。与 rand 相比,这种方法是首选方法,但在敏感代码中,加密应用不应利用 random 函数。random 不接受任何参数,并返回 [0, rand_max] 范围内的 long int 类型的整数。该函数最好用 srandom 函数做种子,以产生质量相对较好的随机数。

需要注意的是,和前面的例子一样,我们使用 time 函数传递当前的时间值作为种子,在安全敏感的应用中不建议使用。

#include #include #include #include #define max 100000
#define size 100
#define nums_to_generate 10
int main() {
    srandom(time(null));
    for (int i = 0; i < nums_to_generate; i){
        printf("%ld\n", random() / max);
    }
    printf("\n");
    exit(exit_success);
}

输出:

91
2019
2410
11784
9139
5858
5293
17558
16625
3069

使用 getrandom 函数在 c 语言中生成随机数

getrandom 是一个 linux 特有的函数,用于获取随机比特,其质量远远高于之前提供的两种方法。getrandom 需要三个参数-void 指针,指向应该存储随机比特的缓冲区,缓冲区的字节大小,以及特殊功能的标志。

在下面的例子中,我们生成一个无符号的整数,其中&tmp 的地址被传递为存储随机位的缓冲区,大小用 sizeof 运算符计算。在极少数情况下,getrandom 检索位的随机性来源可以不初始化。对 getrandom 函数的调用将阻止程序的执行。因此,grnd_nonblock 宏定义作为第三个参数传递给函数,以便在这些情况下立即返回错误值 -1

#include #include #include #include #include #define max 100000
#define size 100
#define nums_to_generate 10
int main() {
    unsigned int tmp;
    getrandom(&tmp, sizeof(unsigned int), grnd_nonblock) == -1 ?
        perror("getrandom") : "";
    printf("%u\n", tmp);
    exit(exit_success);
}
934103271

上一篇:

下一篇:c 语言中的静态变量

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

发布时间:2024/03/14 浏览次数:288 分类:操作系统

本教程演示了在 bash 中生成随机数。

发布时间:2024/01/16 浏览次数:199 分类:编程语言

本文介绍如何在 c# 中的范围内生成随机整数。它包括 next()方法。使用 next() 方法在 c# 中一个范围内生成随机整数

发布时间:2024/01/02 浏览次数:412 分类:c

本文演示了如何在 0 和 1 之间创建一个区间随机数的 c 方法。文介绍了几种 c 方法,如何在 0 到 1 的区间内生成一个随机浮点数。使用 c 11 库生成 0 到 1 区间的随机数

发布时间:2023/12/22 浏览次数:93 分类:python

在 python 中,可以使用 3 种主要方法来生成 0 到 1 之间的随机值:random.randint(),random.random()和 random.unique()函数。

发布时间:2023/09/30 浏览次数:187 分类:java

查看我们在 java 中可以在一个范围之间生成随机数的多种方法。我们将看看在 java 中随机生成 1 到 10 之间的随机数的步骤。我们将看到三个可以生成 1 到 10 之间随机数的 java 包或类,以及其中

发布时间:2023/09/29 浏览次数:127 分类:java

这篇文章介绍了如何在 java 中生成指定范围内的随机数。本文介绍了如何在 java 中生成指定范围内的随机数。有几种在 java 中生成随机数的方法,例如 threadlocalrandom 类的 nextint() 方法,math 类的

发布时间:2023/06/06 浏览次数:323 分类:javascript

本文介绍如何使用种子在 javascript 中生成随机数。 我们实现这一点要归功于 prng,它接受一个种子并返回一个基于该种子的随机数。

发布时间:2023/05/13 浏览次数:365 分类:java

随机数是使用一种算法从一组数字中生成的,该算法可确保每个数字的生成概率相等。在kotlin中使用intrange的random()扩展函数

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便
网站地图