Generating random numbers

Hi all,
How can i generate random numbers in a specific interval such as [0, 100] in fortran?
I wan to generate and assign them to an array.

1 Like

CALL RANDOM_NUMBER(my_array) will do the job, but in the 0<=r<1 range. Note that my_array should of course be real.
my_array = 100*my_array will be in the 0<=r<100 range. If you want integers including 100, then multiply by 101 and take the integer part!

See: https://gcc.gnu.org/onlinedocs/gfortran/RANDOM_005fNUMBER.html

You may also want to change the seed each time you launch your program:
https://gcc.gnu.org/onlinedocs/gfortran/RANDOM_005fSEED.html#RANDOM_005fSEED
There is also a Fortran 2018 function, but I have never used it:
https://gcc.gnu.org/onlinedocs/gfortran/RANDOM_005fINIT.html#RANDOM_005fINIT

Because of course these numbers are not random! They are pseudo-random numbers, generally generated by a mathematical sequence. If you don’t change the seed, the sequence will be the same each time you run your program: but this can be interesting if you modify something in your program and want to test if it still gives exactly the same result.

2 Likes

random_number returns samples from a uniform distribution. Here’s a “naive” implementation of random sampling from a normal distribution:

I say “naive” because it appears to work but statistics are not my strong suit.

2 Likes

See also our open issue #135 in stdlib for implementing random number generators from various distributions such as uniform, normal or gamma.

3 Likes

I’ve got a few super simple examples in my testing framework you could take a look at. I haven’t looked at them at all from a statistical standpoint so I have no idea what the distributions are. They’ll be approximately whatever the underlying random number generator uses I guess. But if you just need something quick and dirty it’s a decent starting point.

1 Like