作者sjgau (sjgau)
看板Fortran
标题Re: [心得] 使用乱数应注意的事项
时间Tue Oct 20 12:10:48 2009
以下程式,呼叫 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