mtprng_rand_real2 Function

public function mtprng_rand_real2(state) result(r)

NAME

mtprng_rand_real2(3f) - [M_random:MERSENNE TWISTER] Obtain a pseudo-random real number in the range [0,<1)
(LICENSE:CUSTOM OPEN)

SYNOPSIS

DESCRIPTION

Obtain a pseudo-random real number in the range [0,1), i.e., a number
greater than or equal to 0 and less than 1.

OPTIONS

state  generator state initialized by mtprng_init(3f) or mtprng_init_array(3f)

RETURNS

EXAMPLE

Sample program:

program demo_mtprng_real2
use M_random, only : mtprng_state, mtprng_init, mtprng_rand_real2
use, intrinsic :: iso_fortran_env, only : int32
implicit none
integer(INT32)     :: seed
type(mtprng_state) :: state
  GET_SEED: block
  integer :: count
  integer :: count_rate
     call system_clock(count, count_rate)
     seed = count
  endblock GET_SEED
  call mtprng_init(seed, state)
  ! returns a IEEE64 real, may be used as double precision
  write(*,*) mtprng_rand_real2(state)
end program demo_mtprng_real2

Arguments

Type IntentOptional Attributes Name
type(mtprng_state), intent(inout) :: state

Return Value real(kind=IEEE64)


Source Code

function mtprng_rand_real2(state) result(r)
! ident_14="@(#) M_random mtprng_rand_real2(3f) Obtain a pseudo-random real number .ge. 0.0 and .lt. 1.0"

type(mtprng_state), intent(inout) :: state                                   ! arguments
real(IEEE64)                      :: r                                       ! return type
   real(IEEE64), parameter        :: factor=1.0_IEEE64 / 4294967296.0_IEEE64 ! Local constant; precalculated to avoid division below

   r = real(mtprng_rand64(state),IEEE64) * factor                            ! compute

end function mtprng_rand_real2