我採取了以下功能ran0
從文本數字食譜。我寫了我自己的程序random2
致電ran0
。爲什麼此Fortran隨機數生成器會導致分段錯誤?
爲什麼此代碼會導致分段錯誤?謝謝你的時間。
FUNCTION ran0(idum)
INTEGER idum,IA,IM,IQ,IR,MASK
REAL ran0,AM
PARAMETER (IA=16807,IM=2147483647,AM=1./IM,IQ=127773,IR=2836,MASK=123459876)
INTEGER k
idum=ieor(idum,MASK)
k=idum/IQ
idum=IA*(idum-k*IQ)-IR*k
if (idum.lt.0) idum=idum+IM
ran0=AM*idum
idum=ieor(idum,MASK)
return
END FUNCTION
PROGRAM random2
IMPLICIT NONE
REAL :: ran0
PRINT *, ran0(6)
END PROGRAM
不要這樣做。數值型隨機數發生器都不是很好,而且上面的ran0是一個具有相關性和短週期的線性同餘發生器。 gfortran和ifort中的'random_number()'內部函數都是非常穩定的實現,當然比上述任何一種指標都更好,並且有很多庫可供您下載,編譯和使用(http:// www。 agner.org/random/,http://www.iro.umontreal.ca/~simardr/testu01/tu01.html)如果您需要這些,可以實施更好的PRNG。如果您的計算需要PRNG,請使用好的。 – 2013-03-05 22:48:35