fortran语言中的随机数发生器

fortran语言中的随机数发生器,fortran,gfortran,prng,fortran-common-block,Fortran,Gfortran,Prng,Fortran Common Block,我正在测试链接(fortran 77代码)中提到的RNG代码: 它应用了Park&Miller算法 程序的函数调用为 call srand(seed) x=rand() 但是,程序似乎对srand()的播种没有响应,即x值不受初始播种的影响,始终等于~0.218。我怀疑这与公共块和数据块的定义有关,因为x的值相当于将种子放入123456789,这是在数据块中定义的初始化值 有什么想法吗 我正在使用gfortran进行编译。好的,问题是原始的srand和rand可能会被调用。我将函数重

我正在测试链接(fortran 77代码)中提到的RNG代码:

它应用了Park&Miller算法

程序的函数调用为

call srand(seed)  
x=rand()  
但是,程序似乎对srand()的播种没有响应,即x值不受初始播种的影响,始终等于~0.218。我怀疑这与公共块和数据块的定义有关,因为x的值相当于将种子放入123456789,这是在数据块中定义的初始化值

有什么想法吗


我正在使用gfortran进行编译。

好的,问题是原始的
srand
rand
可能会被调用。我将函数重命名为
srand2
rand2
,一切都开始按预期工作


对于
seed=1
而言,结果为
7.82636926E-06
;对于
seed=2
而言,结果为
1.56527385E-05
。在gfortran和Intel的fortran中进行了检查。

如何定义
种子
?@Cheery:integer(8)种子。种子=…不,它等于什么?不要告诉我你没有改变它。)同样的种子会得到同样的结果。@Rain我两种方法都试过了,而且我把rand重命名为rand2。它在英特尔的fortran下工作,但在gfortran下——是的,一直都是相同的数字。是的,JSEED没有改变。问题是原始srand被调用-重命名它。在Functin中生成随机数而不是子例程不是一个好主意。谢谢!这真的很奇怪,伊夫特对格夫特兰。不管怎样,它成功了。