Questo sito contribuisce alla audience di

Generatore di numeri casuali in fortran 77

Si tratta di un module che ci permette di generare dei numeri casuali scritto da George Marsaglia

format fortran,fortran 77,dispense fortran,fortran numeri casuali,random fortran

Si tratta di un module che ci permette di generare dei numeri casuali scritto da George Marsaglia

module marsaglia
implicit none
private
public :: kiss, kisset
INTEGER :: x=123456789, y=362436069, z=521288629, w=916191069
contains
FUNCTION kiss ()
integer :: kiss
! The KISS (Keep It Simple Stupid) random number generator. Combines:
! (1) The congruential generator x(n)=69069*x(n-1)+1327217885, period 2^32.
! (2) A 3-shift shift-register generator, period 2^32-1,
! (3) Two 16-bit multiply-with-carry generators, period 597273182964842497>2^59
! Overall period>2^123; Default seeds x,y,z,w.
! Set your own seeds with statement i=kisset(ix,iy,iz,iw).
!
x = 69069 * x + 1327217885
y = m (m (m (y, 13), - 17), 5)
z = 18000 * iand (z, 65535) + ishft (z, - 16)
w = 30903 * iand (w, 65535) + ishft (w, - 16)
kiss = x + y + ishft (z, 16) + w
contains
function m(k, n)
integer :: m, k, n
m = ieor (k, ishft (k, n) )
end function m
END FUNCTION kiss
function kisset (ix, iy, iz, iw)
integer :: kisset, ix, iy, iz, iw
x = ix
y = iy
z = iz
w = iw
kisset = 1
end function kisset
end module marsaglia

! PROGRAM test
! use marsaglia
! PRINT *, kiss ()
! PRINT *, kisset (1, 2, 3, 4)
! PRINT *, kiss ()
! END PROGRAM test