Fortran根据系统时间生成随机数

FORTRAN中用于产生随机数的子程序有random_seed和random_number,其中random_seed产生seed,random_number根据seed的值产生随机数。当random_seed()的参数为空时,其会给出一个默认的seed值,这意味着每次调用时产生的随机数都是相同的。(这也是有用的,这意味着你每次在执行程序的时候,会获得相同随机数序列,这些便于调试,但是有时候可能会需要每次生成不同的随机数序列以满足程序的要求)。

下面的方法利用系统时间产生随机数:

      subroutine init_random_seed()
      integer :: i,n,clock
      integer,dimension(:),allocatable :: seed
      call random_seed(size=n)
      allocate(seed(n))
      call system_clock(count=clock)
      seed=clock+37*(/(i-1,i=1,n)/)
      call random_seed(PUT=seed) 
      deallocate(seed)
      end subroutine

该子程序来源于GNU Fortran:http://gcc.gnu.org/onlinedocs/gfortran/RANDOM_005fSEED.html

(以上内容转载自:http://blog.sina.com.cn/s/blog_872ecf9f01010kwl.html

调用通过如下程序可进行调用:

      program randomnum
      implicit real*8(a-h,o-z)
      call init_random_seed()
      call random_number(x)
      write(*,*)x
      end

注意:在一个程序中只需调用一次子程序 init_random_seed(),特别是在有另一个子程序也需要产生随机数的情况下,仍无需(说是不能或许更为恰当些)再次调用init_random_seed()。否则,若两次调用时间相差很小,可能出现生成的随机数的seed一样的情况,此时就会出现某个随机数连续出现若干次的情况。


转载于:https://my.oschina.net/u/1037903/blog/226730

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值