2 ! { dg-require-visibility "" }
8 integer, public
, parameter :: GNDP
= kind(1.0d0)
10 real(kind
= GNDP
), save :: &
11 gnc
= 362436.0 / 16777216.0, &
12 gncd
= 7654321.0 / 16777216.0, &
13 gncm
= 16777213.0 / 16777216.0
18 real(kind
= GNDP
), save :: gnu(97)
21 subroutine gn_fatal(message
)
22 character(len
= *), intent(in
) :: message
25 end subroutine gn_fatal
27 function gn_monte_rand(min
, max
) result(monte
)
28 real(kind
= GNDP
), intent(in
) :: min
29 real(kind
= GNDP
), intent(in
) :: max
30 real(kind
= GNDP
) :: monte
35 call gn_fatal('gn_monte_rand: min > max')
36 else if (min
== max
) then
37 call gn_fatal('gn_monte_rand: min = max: returning min')
41 monte_temp
= gnu(gni97
) - gnu(gnj97
)
42 if (monte_temp
< 0.0) then
43 monte_temp
= monte_temp
+ 1.0
46 gnu(gni97
) = monte_temp
53 monte
= min
+ monte_temp
* (max
- min
)
55 end function gn_monte_rand
57 end module general_rand