第一个 rand() 在 srand(time(0) 之后生成相同的值
first rand() generates the same value after srand(time(0))
srand(time(0))
似乎没有正确播种rand()
,生成的第 1 个数字始终相同。
这是在OS X上运行的,我的设置或代码有问题吗?我确实等待了几秒钟以重新运行该程序。第一个数字仅在一天后递增,其余数字始终是随机的。
#include<iostream>
using namespace std;
int main ()
{
int Num1,Num2;
// seed the random number generator
srand((unsigned int )time(NULL));
Num1 = rand() %49 +1 ;
do {Num2 = rand() % 49 + 1;}
while(Num2 == Num1);
///Display Random Numbers
cout<<"Numbers are: "<<endl;
cout<<Num1<<" "<<Num2<<endl<<endl;
return 0;
}
你得到的是相同的数字,因为种子的价值非常接近,随机生成器还没有时间发散。 在OS X上使用sranddev()
而不是srand()
,它将为您提供更好的种子并避免此问题。
#include<iostream>
using namespace std;
int main()
{
int a, b;
// seed the random number generator
sranddev();
a = rand();
b = rand();
cout << a << " " << (a % 49) + 1 << endl
<< b << " " << (b % 49) + 1 << endl << endl;
return 0;
}
假设您可以访问 C++11,这样的事情会更好:
#include <iostream>
#include <random>
int main()
{
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(1, 50);
std::cout << "Numbers are: " << dis(gen) << " " << dis(gen) << "n";
return 0;
}
rand
通常是一个非常糟糕的随机生成器,值范围有限,使用% N
来限制值会使情况变得更糟。 这里有一个关于为什么 rand 不是一个好的选择的演示文稿:http://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful
除了使用 sranddev() 而不是 rand()。将范围也从 %49 增加到 50 或更高似乎也有效。
相关文章:
- 为什么我不能将 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程序是什么?