The Mersenne Twister is a general purpose pseudo-random number generator, developed in 1997 by Makoto Matsumoto and Takuji Nishimura.
Compile the FORTRAN source in
mt19937.f
and link the object file with example program TEST
. The FORTRAN
77 program initialises the PRNG with the current time delta, then prints 120
random numbers:
C ******************************************************************
C
C TEST PROGRAM FOR MERSENNE TWISTER (MT19937).
C
C ******************************************************************
PROGRAM TEST
EXTERNAL SGRND
DOUBLE PRECISION GRND
INTEGER I, ISEED
C
C SET AND OUTPUT PRNG SEED VALUE.
C
ISEED = TIME()
PRINT 100, ISEED
CALL SGRND(ISEED)
C
C PRINT RANDOM NUMBERS.
C
PRINT 200, (GRND(), I = 1, 120)
100 FORMAT (' MERSENNE TWISTER',/,' SEED: ',I12)
200 FORMAT (6(X,F8.6))
END
The function TIME()
has to be provided by the compiler. To build
the source with GNU Fortran, run:
$ gfortran -fno-range-check -c mt19937.f
$ gfortran -o test test.f mt19937.o
The test program then outputs the seed, followed by a batch of random numbers:
$ ./test
MERSENNE TWISTER
SEED: 1619448774
0.002282 0.261516 0.247671 0.291327 0.843831 0.441386
0.767320 0.131605 0.243605 0.914816 0.199729 0.384769
0.521070 0.161836 0.646428 0.260970 0.153433 0.306368
0.475345 0.107536 0.460790 0.839820 0.112740 0.793171
0.964610 0.931927 0.124288 0.863997 0.671106 0.416717
0.661144 0.559762 0.391374 0.183029 0.564272 0.523289
0.203854 0.418752 0.482456 0.679678 0.037317 0.394991
0.953748 0.173723 0.803380 0.488424 0.828065 0.366737
0.892184 0.454422 0.774777 0.754022 0.086881 0.873094
0.911008 0.394991 0.540264 0.517282 0.734855 0.511451
0.873087 0.746678 0.485112 0.758031 0.091812 0.973301
0.627849 0.666051 0.585444 0.906104 0.388585 0.234770
0.228406 0.952953 0.994076 0.503377 0.883810 0.844211
0.585209 0.768527 0.229184 0.265604 0.128610 0.786664
0.938202 0.844929 0.384856 0.335330 0.606068 0.560731
0.110499 0.770378 0.910298 0.083177 0.210712 0.301827
0.117783 0.678383 0.230553 0.222373 0.756828 0.572687
0.860481 0.839519 0.269958 0.322089 0.030174 0.686624
0.432446 0.573208 0.315556 0.423841 0.601680 0.830107
0.662937 0.903037 0.140810 0.564939 0.596350 0.426825