只要我运行这段代码,我都会得到相同的结果。
程序
#include<stdlib.h>
int main(int agrc, const char *argv[]) {
int i = rand();
printf("%d\n",i);
for(i=0;i<10;i++) {
printf("%d\n",rand());
}
}
结果:
41
18467
6334
26500
19169
15724
11478
29358
26962
24464
5705
我在
mingw
上运行了它
.其实我在学
Objective-C
请帮助我。
- 2021-1-101 #
- 2021-1-102 #
您要初始化PRNG。
将其初始化 (通常在 once内部 )并致电
main()
功能。如果不初始化PRNG,则默认为使用值
srand()
初始化它 .当然,使用其他常数初始化它不会为程序的不同运行提供不同的伪随机数。1
您需要初始化一个随程序每次运行而变化的值.从
srand(1); /* same as default */ srand(42); /* no gain, compared to the line above */
返回的值 函数是最常用的值。time()
srand(time(NULL)); /* different pseudo random numbers almost every run */
的问题 是它在同一秒返回相同的值.因此,如果您在同一天的11:35:17两次调用您的程序,您将获得相同的伪随机数。 - 2021-1-103 #
只需添加到yacoby的答案中-我对此感到有些惊讶, 默认为基于时间的种子,因此我查阅了手册页:
time(NULL)
因此,如果您更改代码以使用
If no seed value is provided, the rand() function is automatically seeded with a value of 1.
seed(1)
每次都会改变它。 - 2021-1-104 #
seed(time())
的输出 是pseudo-random,这意味着它看起来实际上是随机的,但每次都从一个称为种子的特殊值开始,以相同的方式进行计算.使用相同的种子值,您将获得相同的随机数序列。要设置其他种子,请使用标准C函数 rand 在您开始生成随机数之前,请在代码中输入一次.每次运行程序时,获取不同的随机数序列的一种常见方法是将种子基于时钟时间.例如. void srand(unsigned int)
srand(clock())
相关问题
- 如何在C中生成随机浮点数crandom2021-01-11 22:56
您必须在使用唯一编号的rand函数中植入种子.最简单的方法是使用
time()
例如
原因是rand()(或任何其他基于算法的函数)提供的随机数不是随机的. rand函数仅获取其当前数值状态,应用转换,将转换结果另存为新状态并返回新状态。
因此,要让rand返回不同的伪随机数,首先必须将rand()的状态设置为唯一。