Fortran根據系統時間生成隨機數

FORTRAN中用於產生隨機數的子程序有random_seed和random_number,其中random_seed產生seed,random_number根據seed的值產生隨機數。當random_seed()的參數爲空時,其會給出一個默認的seed值,這意味着每次調用時產生的隨機數都是相同的。(這也是有用的,這意味着你每次在執行程序的時候,會得到相同隨機數序列,這些便於調試,可是有時候可能會須要每次生成不一樣的隨機數序列以知足程序的要求)。
html

下面的方法利用系統時間產生隨機數:shell

      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.htmldom

(以上內容轉載自:http://blog.sina.com.cn/s/blog_872ecf9f01010kwl.htmlspa

調用經過以下程序可進行調用:調試

      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同樣的狀況,此時就會出現某個隨機數連續出現若干次的狀況。code

相關文章
相關標籤/搜索