用C语言运行rand()并使用Shell脚本循环
我有一个C代码文件调用test.C,输出为test.out,如下所示,只是一个简单的随机数输出: 现在我使用shell脚本在Linux中运行test.out 5次,代码如下:用C语言运行rand()并使用Shell脚本循环,c,shell,random,C,Shell,Random,我有一个C代码文件调用test.C,输出为test.out,如下所示,只是一个简单的随机数输出: 现在我使用shell脚本在Linux中运行test.out 5次,代码如下: for i in 1 2 3 4 5 do test.out done 但结果如下所示 0.840188 0.840188 0.840188 0.840188 0.840188 它显示相同的随机数。使用当前时间初始化伪随机生成器。在大多数平台上,time函数以秒为单位返回当前时间。如果您在一秒钟内多次运行此程序
for i in 1 2 3 4 5
do
test.out
done
但结果如下所示
0.840188
0.840188
0.840188
0.840188
0.840188
它显示相同的随机数。使用当前时间初始化伪随机生成器。在大多数平台上,time函数以秒为单位返回当前时间。如果您在一秒钟内多次运行此程序,那么您将在所有执行中设置相同的种子,并获得相同的随机数 例如,在脚本的循环中添加sleep 1,您将看到不同的结果。rand将为同一种子生成与您使用srand设置的种子相同的数字序列 很可能您的循环运行得太快,所有运行都使用相同的种子,即timeNULL返回相同的值。因此,您可以看到相同的输出 您可以拖动48来生成均匀分布的数字。或者,如果您只是想测试rand,您可以在迭代之间添加一个延迟
for i in 1 2 3 4 5
do
test.out
done
在同一秒内执行程序5次,由于使用系统时间(秒)作为rand函数的种子,自然会得到相同的结果。如果在执行之间等待一秒或更长时间,则会得到不同的值。或者只使用时间以外的值,如srandtimeNULL^getpid*40499;从理论上讲,由于PIDs的重用,它可能仍然会以相同的序列号结束。但在实践中,它基本上是有效的。太棒了!它起作用了!在实践中,是否有任何理论方法可以工作?这需要在一秒钟内重复使用PID,这是非常不可能的。不过,我承认,这并非不可能。
for i in 1 2 3 4 5
do
test.out
done