尽管使用了随机种子,随机数仍然保持不变
我有以下一小段代码:
  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()是非标准的。 
上一篇: Random numbers keep coming out the same, despite random seed being used
