【发布时间】:2025-12-01 00:40:02
【问题描述】:
我正在测试链接中提到的 RNG 代码(fortran 77 代码):
https://www.cisl.ucar.edu/zine/96/spring/articles/3.random-6.html
它应用了 Park & Miller 算法。
程序的函数调用是
call srand(seed)
x=rand()
但是程序似乎没有响应 srand() 的播种,即 x 值不受初始播种的影响,并且始终等于 ~0.218。我怀疑这与公共块和数据块的定义有关,因为x的值相当于将种子放置为123456789,这是数据块中定义的初始化值。
有什么想法吗?
我正在用 gfortran 编译。
【问题讨论】:
-
你如何定义
seed? -
@Cheery:整数(8)种子。种子 = ...
-
不,它等于什么?不要告诉我你没有改变它))相同的种子会产生相同的结果。
-
@Rain 我尝试了两种方法,我也将 rand 重命名为 rand2。它在 Intel 的 fortran 下工作,但在 gfortran 下工作——是的,一直都是同一个数字。是的,JSEED 没有改变。问题是原始 srand 被称为 - 重命名它。
-
在函数而不是子例程中生成随机数不是一个好主意。
标签: fortran gfortran prng fortran-common-block