【问题标题】:random number generator in fortranfortran中的随机数生成器
【发布时间】: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


【解决方案1】:

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

对于seed = 1,结果是7.82636926E-06,对于seed = 2,结果是1.56527385E-05。在 gfortran 和 Intel 的 fortran 中检查过。

【讨论】:

  • 谢谢!这真的很奇怪,ifort vs gfortran 明智。不管怎样,它奏效了。
最近更新 更多