gpt4 book ai didi

c - rand() 行为不理解

转载 作者:太空宇宙 更新时间:2023-11-04 00:39:50 25 4
gpt4 key购买 nike

我有一个简单的程序可以在 C 中生成 N 对随机数。

为此,我正在使用 rand()。 N 的值是一个命令行参数。

我注意到当传递的命令行 arg 相同时,它总是生成相同的数字流。

rand() 联机帮助页说,如果没有明确的种子,RNG 将隐式地由值 1 播种(在我的程序中没有调用 srand() ).

然而,当我用 arg=10 和 arg=12 调用我的程序时,我应该看到两个序列的前 10 位数字相等,对吧? (他们将使用相同的种子,即 1)。这没有发生。看起来种子是从隐式传递的 arg 派生和应用的,但这似乎不太可能。有什么想法吗?

更新: [抱歉没有早点发布]

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
int objs=100, i;
if (argc >= 2)
objs = atoi(argv[1]);

for(i=0; i<objs; i++){
int p = rand() % objs;
int q = rand() % objs;
printf("%d %d\n", p, q);
}
return 0;
}

我正在使用 Ubuntu 12 和 gcc 4.7.2。

最佳答案

rand 的 int 版本将生成从 0 到 RAND_MAX 的随机数。这些整数将与相同的种子相同。但是,您的代码中必须有另一个步骤将该数字转换为 0-10 或 0-12 范围内的一个。这种缩放将导致不同的输出。

例如,如果它使用除法,并且 rand 返回 25,那么:

// for range 0..10,
25 / 11 => 2 (truncated)

// for range 0..12,
25 / 13 => 1 (truncated)

关于c - rand() 行为不理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13669147/

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