win32 - 更高的随机最大值?

Kai*_*aan 1 c++ random winapi visual-studio

可能重复:
在C或C++中使用1到10 ^ 10的随机数填充数组

你好,

简单的问题; 我正在寻找一种方法来获得比rand()给我更高的随机值.rand()给出最大32767.(http://msdn.microsoft.com/en-us/library/398ax69y%28v=vs.80%29.aspx)我尝试重新定义RAND_MAX,但我想编译器不接受重新定义,因为它在与默认值相同的边界.

我基本上想要一个适合无符号整数的随机值(在RTP数据包中生成一个SSRC号).我真的不想碰撞!有没有比rand()更好的win32功能?

提前致谢

Jer*_*fin 6

是的 - RAND_MAX只是告诉你设计到发电机的最大值.更改它不会影响发电机的工作方式.

从中获取32位值的最简单方法可能rand()是连续调用两次,并将两个值放在一起:

unsigned SSRC = rand()| 兰德<< 16;

一种典型的播种方式rand()time:

srand((unsigned)time(NULL));
Run Code Online (Sandbox Code Playgroud)

对于SSRC,您希望这样做 - time通常只有一秒钟的粒度,因此这(几乎)保证任何两个进程在接近同一时间启动都会导致冲突.

实际上,随机性几乎与唯一性无关.另一种可能性是(例如)将机器的IP地址,进程ID,时间和XOR三者结合在一起.结果根本不是特别随机的,但对于这种任务来说是足够独特的.