尽管使用了随机种子,随机数仍然保持不变

我有以下一小段代码:

  REAL(8)       :: x
  INTEGER       :: i

  call system_clock(i)
  WRITE(*,*) 'cpu time', i
  CALL random_seed(i)

  CALL random_number(x)
  WRITE(*,*) 'uniform RandVar', x

CPU时间正常,但每次运行时我都会得到相同的统一RandVar number = 0.99755959009261719 ,就像random_number RandVar number = 0.99755959009261719使用相同的默认种子并忽略随机种子。

我究竟做错了什么?


同样的种子可能正在被使用:这是依赖于处理器的。 原因是你对random_seed的调用不是设置种子。

有了参考

CALL random_seed(i)

参数i不是( intent(in) )种子,而是处理器使用的种子的( intent(out) )大小。 这个电话就像

CALL random_seed(SIZE=i)  ! SIZE is the first dummy argument

要设置种子,你需要明确地与PUT伪参数相关联: call random_seed(put=seed) 。 这里的种子是一个等级为1的数组,大小至少为n ,其中n又是处理器相关的,是通过call random_seed(size=n)给出的call random_seed(size=n) 。 从你的电话i拥有这个价值。

详细信息在F2008的13.7.136中给出。

种子发生器的常见方法是:

integer, allocatable :: seed(:)
integer size

call random_seed(size=size)
allocate(seed(size))
! set seed(:) somehow
call random_seed(put=seed)

适当设置seed不是一个简单的过程。 我在这里没有解决如何做到这一点,但可以在其他问题的答案中找到详细信息。

使用评论中提到的srand()是非标准的。

链接地址: http://www.djcxy.com/p/18795.html

上一篇: Random numbers keep coming out the same, despite random seed being used

下一篇: Prevent duplicate entries parse.com