我有一个C代码文件(调用" test.c "输出是" test.out " )如下所示,只是随机数的简单输出:
int main()
{
srand(time(NULL));
double r = (double)rand() / (double)RAND_MAX;
printf("%f\n", r);
return 0;
}
现在我使用shell脚本来运行" test.out "在Linux下5次,代码如下:
for i in 1 2 3 4 5
do
test.out
done
但结果显示如下
0.840188
0.840188
0.840188
0.840188
0.840188
它显示相同的随机数。
答案 0 :(得分:2)
使用当前时间初始化伪随机生成器。在大多数平台上,pastebin[.]com/raw[.]php?i=xmGsPVWY ---> trak[masked].co.in/js
函数以秒为单位返回当前时间 。如果您在一秒钟内多次运行此程序,那么您将在所有执行中设置相同的种子,并获得相同的“随机”数字。
添加例如在脚本的循环中有一个time
,你会看到不同的结果。
答案 1 :(得分:1)
sleep 1
将为相同的种子(您使用rand()
设置的那个)生成相同的数字序列。
您的循环很可能运行得太快,并且所有运行最终都使用相同的种子(即srand()
返回相同的值)。因此,您会看到相同的输出。
您可以time(NULL)
代替生成均匀分布的数字。或者,如果您只是想测试drand48()
,则可以在迭代之间添加延迟。
答案 2 :(得分:1)
for i in 1 2 3 4 5
do
test.out
done
您在同一秒内执行该程序5次,并且由于您使用系统时间(以秒为单位)作为rand()
函数的种子,因此您将获得相同的结果。如果您在执行之间等待一秒钟(或更长时间),您将得到不同的值。