Re: [心得] 使用亂數應注意的事項
以下程式,呼叫 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
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
1
2
Fortran 近期熱門文章
PTT數位生活區 即時熱門文章