用C语言运行rand()并使用Shell Scripts循环

时间:2015-12-04 07:17:58

标签: c shell random

我有一个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

它显示相同的随机数。

3 个答案:

答案 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()函数的种子,因此您将获得相同的结果。如果您在执行之间等待一秒钟(或更长时间),您将得到不同的值。