用于 c++ 中函数 rand() 的公式
Formula used for function rand() in c++
我想知道在C++中使用rand()
函数生成随机数的公式是什么。起初,我虽然它每次都会返回随机数,但事实并非如此。
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
cout << "Hello world!" << endl;
srand(9865);
cout << rand() << "n";
return 0;
}
在这里,我想,也许是因为给定的种子编号和那个未知的公式,它将显示相同的数字。
但是,当我删除"srand(9865);"并执行几次时,它只显示"41"作为输出。请解释一下这里发生了什么。
来自 http://linux.die.net/man/3/rand
"如果未提供种子值,则 rand() 函数将自动设定值为 1. "和 "..这些序列可以通过调用具有相同种子值的 srand() 来重复。"
每次都必须用非静态种子为随机函数播种。一个简单但不那么准确的解决方案是用时钟播种:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
cout << "Hello world!" << endl;
srand(time(NULL));
cout << rand() << "n";
return 0;
}
库规范没有规定随机数生成器的公式(这取决于实现)。唯一指定的是可以通过srand
控制事物以实现一致的伪随机生成:
为了生成类似随机的数字,srand 通常被初始化为一些独特的运行时值,例如函数 time 返回的值(在标头
中声明)。这对于大多数琐碎的随机化需求来说足够独特。
所以:
-
如果使用给定种子初始化
srand
,则以下rand
调用将在运行中保持一致。 -
如果使用基于时间的种子初始化
srand
,则以下rand
调用几乎肯定会在运行中有所不同。 -
如果不初始化
srand
,以下对rand
的调用将使用默认的初始种子。
请注意,在当代C++中,您应该避免使用这些古老的函数。请参阅此问题的答案。
相关文章:
- 为什么我不能将 rand() 与数组的大小一起使用?
- 为什么新的随机库比std::rand()更好
- 为什么rand()的使用被认为是不好的
- C++使用 rand 定义函数语法
- 为什么 rand 不在我的代码中生成随机数?
- 为什么 CWE 认为 rand() 具有潜在危险
- 在 c++ 中,rand() 在执行有调试和不带调试的程序时生成不同的结果
- Rand() 没有显示随机数,请帮助我了解出了什么问题:)
- Rand()大小写开关在多次迭代后运行到无穷大
- rand()函数在特定问题中的工作
- 为什么 someNumber = rand() & 100 + 1;不产生错误?
- 除了 rand() 之外,是否有任何随机生成器库,开发人员可以手动设置种子?
- 如何生成比用户使用 rand() 函数输入的数字大 5-10% 的数字?
- rand()/RAND_MAX 函数每次打印 1
- 使用 rand() 和 srand() 有问题
- " rand()%3-1 " 在 C++ 中是什么意思?
- 如何使 rand() 更加随机?
- C++ 更深入地了解 rand() 和 srand() 内部
- 在 C++ 中向 rand() 添加模数会影响 for 循环之外的执行,为什么以及如何补救?
- cpp中rand()方法的bankend程序是什么?