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 (10, 20, 30, 40)
PRINT *, kiss ()
END PROGRAM test

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: