c++中关于rand()函数的混淆
Confusion about rand() function in C++
我发现了以下情况的不同输出
案例1
....
rand();
cout<<a[rand()%4];
....
Case 2
....
//rand();
cout<<a[rand()%4];
......
如果没有srand(),答案应该是一样的,但结果却是不同的。
From http://en.cppreference.com/w/cpp/numeric/random/rand
std:: rand()为rand()使用的伪随机数生成器提供种子。如果在任何调用rand()之前使用rand(), rand()的行为就像用rand(1)作为种子一样。每次rand()使用rand()作为种子时,它必须在后续调用中产生相同的值序列。标准库中的其他函数也可以调用rand,但哪些函数调用rand是由实现定义的。rand()是否线程安全是由实现定义的。
这意味着rand()在case()中使用它设置的相同种子产生相同的数字序列。我认为情况是这样的,虽然一个调用rand()种子它与seed = 1,然后不设置种子为1在后续调用。因此,它将产生不同的结果。验证这一点的一种方法是再次显式地使用1作为种子。
每次调用rand
都会给您一个新的伪随机数。调用srand
只会改变您将得到的伪随机数字序列。
相关文章:
- C++使用 rand 定义函数语法
- rand()函数在特定问题中的工作
- 如何生成比用户使用 rand() 函数输入的数字大 5-10% 的数字?
- rand()/RAND_MAX 函数每次打印 1
- 在C++中使用 rand() 函数的替代方案
- 如何使用三个参数化构造函数的rand()函数初始化对象的数组
- 为什么循环只在 c++ 中使用 rand() 函数时才运行 1 或 2 次
- rand() 函数通过升序到前一个数字来生成下一个数字
- 如何在 rand() 函数中使用枚举值
- 我想用rand和函数生成一些数学问题
- Rand() 在每次函数调用时返回相同的值
- 如何调用一个变量(包含rand()函数)并得到不同的数字
- rand()在通过函数调用时生成相同的随机数集(即使在使用srand(time(NULL)进行种子设定之后)
- 胎面 1 错误 - 使用 rand() 函数
- 在 C++ 中编写多个 if-else 语句并使用 rand() 函数进行分支
- 如何使用 rand() 函数每次都提出不同的问题
- 带有 rand() 函数的动态链接器错误
- 用于 c++ 中函数 rand() 的公式
- rand() 和 random() 函数有什么区别
- rand() 函数没有生成足够的随机