Re: [心得] 使用亂數應注意的事項

看板Fortran作者 (sjgau)時間15年前 (2009/10/20 12:10), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
以下程式,呼叫 init_rnd() 這個副程式 640次,總計花費時間 10.52秒, 其所代表的意義是 call random_seed() 這個副程式是 呼叫 系統時間,使用 系統時間的秒數來當作 亂數的種子數。 而作業系統每秒鐘更新 系統時間 64次, 每隔 1/64 秒,才會得到 不同的時間, 因為在 很短的時間內 , 重複的呼叫 call random_seed() 會得到 很接近的時間數字,所以 一開始的 產生的亂數匯 很接近,不夠亂。 所以,又要有一些 改變的作法。 program VF1019 implicit none integer i, j, k real x, y, z do i=1, 640 call init_rnd() end do CALL RANDOM_NUMBER(x) print *, i, x end program VF1019 ! ----------------------------------------------- subroutine init_rnd() implicit none integer ct1 real x, x1 call random_seed() call random_number(x) x1= x do while (x1 .EQ. x) call random_seed() call random_number(x) end do end -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.20.173.112
文章代碼(AID): #1AtJXB9Y (Fortran)
文章代碼(AID): #1AtJXB9Y (Fortran)