我用过
#include<stdlib>
#include<time>
using namespace std;
srand((unsigned)time(0));
int n=(rand()>>8)%4;
但是还有其他随机函数,或者其他函数可以用作随机数生成器?
编辑:我没有特别的理由提出这个问题,我只是想知道C ++是否还有其他随机函数。答案 0 :(得分:16)
答案 1 :(得分:14)
rand()和srand()函数都是C ++ Standard指定的。如果要写自己的,请注意John von Neumann说的话:
“任何考虑算术的人 产生随机数字的方法是 当然是处于罪恶的状态“
答案 2 :(得分:14)
此代码非常有效。虽然用户可能会在几次迭代后开始注意到模式。
int FastRandom()
{
return 10;
}
答案 3 :(得分:5)
答案 4 :(得分:2)
int unixrand()
{
int x;
int f = open("/dev/random", O_RDONLY);
if (f < 0) return -1; /* Error */
if (sizeof(x) != read(f, &x, sizeof(x))) {
close(f);
return -1;
}
close(f);
if (x < 0) x = ~x;
return x;
}
答案 5 :(得分:1)
答案 6 :(得分:0)
Bruce Schneier和John Kelsey写了a random number generator你可能感兴趣的。相反,它是种子生成器。即使Yarrow不再受支持,您可能会对它如何收集熵感兴趣。
OpenSSL has an API相对容易访问且非常便携。 Mozilla附带a decent API that wraps whatever the OS offers。
但就个人而言,我通常使用Boost.Random,已经提出过。
答案 7 :(得分:-2)
随机性为您提供了均匀分布的良好随机数,并且做得非常好。
其他任何事情都意味着您希望实际扭曲分布。
例如,使用Microsoft的GUID生成器会为您提供一个不太可能重复的随机ID,并考虑时间和计算机等内容。
答案 8 :(得分:-4)
时间通常是最随机的操作,执行起来也很便宜,但它仍然可以预测。
如果您想要真正的随机性,使用某种外部输入是您唯一的解决方案。
Quantum Random Bit Generator是一种提供此类数据的服务。