【发布时间】:2011-06-14 13:29:46
【问题描述】:
需要为每个不同的循环生成 0 到 1 之间的随机数。
for ( 1 to 10000)调用RandomKey函数生成不同的随机数。
但问题是每次迭代我都会得到相同的数字。
RandomKey函数如下:
void RandomKey ()
{
srand((unsigned)time(0));
for (int k=0;k<ActivityNumber;k++)
{
Act_num[k].Priority=(rand()%10000)*0.0001;//random number
}
for (int i=0;i<ActivityNumber;i++)
arr[i]=Act_num[i].Priority;
我该如何解决这个问题?
【问题讨论】:
-
您系统上的
RAND_MAX是什么? -
优先级为浮动。 Rand_max 我不知道。但问题出在srand
-
记住:如果你在函数 RandomKey() 中将种子设置为 time(0),如果调用是在同一时间,你会通过 rand() 得到相同的数字(分辨率为 1 秒)
-
@furkan:说清楚一点;你是说调用
RandomKey()时,arr[0]、arr[1]等的值都是一样的?即arr[0] == arr[1]等?或者你的意思是arr[0]在重复 调用RandomKey()时总是相同的? -
@furkan: 另请注意,
(float)rand() / (float)RAND_MAX是获得 0 到 1 之间均匀分布值的更简洁的方法。
标签: c++