LAPACK  3.11.0
LAPACK: Linear Algebra PACKage
la_constants.f90
1 
2 !
3 ! =========== DOCUMENTATION ===========
4 !
5 ! Online html documentation available at
6 ! http://www.netlib.org/lapack/explore-html/
7 !
8 ! Authors:
9 ! ========
10 !
12 !
14 !
16 !
18 ! ==================
22 !
24 ! =====================
39 !
41 ! -- LAPACK auxiliary module --
42 ! -- LAPACK is a software package provided by Univ. of Tennessee, --
43 ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
44 
45 ! Standard constants for
46  integer, parameter :: sp = kind(1.e0)
47 
48  real(sp), parameter :: szero = 0.0_sp
49  real(sp), parameter :: shalf = 0.5_sp
50  real(sp), parameter :: sone = 1.0_sp
51  real(sp), parameter :: stwo = 2.0_sp
52  real(sp), parameter :: sthree = 3.0_sp
53  real(sp), parameter :: sfour = 4.0_sp
54  real(sp), parameter :: seight = 8.0_sp
55  real(sp), parameter :: sten = 10.0_sp
56  complex(sp), parameter :: czero = ( 0.0_sp, 0.0_sp )
57  complex(sp), parameter :: chalf = ( 0.5_sp, 0.0_sp )
58  complex(sp), parameter :: cone = ( 1.0_sp, 0.0_sp )
59  character*1, parameter :: sprefix = 'S'
60  character*1, parameter :: cprefix = 'C'
61 
62 ! Scaling constants
63  real(sp), parameter :: sulp = epsilon(0._sp)
64  real(sp), parameter :: seps = sulp * 0.5_sp
65  real(sp), parameter :: ssafmin = real(radix(0._sp),sp)**max( &
66  minexponent(0._sp)-1, &
67  1-maxexponent(0._sp) &
68  )
69  real(sp), parameter :: ssafmax = sone / ssafmin
70  real(sp), parameter :: ssmlnum = ssafmin / sulp
71  real(sp), parameter :: sbignum = ssafmax * sulp
72  real(sp), parameter :: srtmin = sqrt(ssmlnum)
73  real(sp), parameter :: srtmax = sqrt(sbignum)
74 
75 ! Blue's scaling constants
76  real(sp), parameter :: stsml = real(radix(0._sp), sp)**ceiling( &
77  (minexponent(0._sp) - 1) * 0.5_sp)
78  real(sp), parameter :: stbig = real(radix(0._sp), sp)**floor( &
79  (maxexponent(0._sp) - digits(0._sp) + 1) * 0.5_sp)
80 ! ssml >= 1/s, where s was defined in https://doi.org/10.1145/355769.355771
81 ! The correction was added in https://doi.org/10.1145/3061665 to scale denormalized numbers correctly
82  real(sp), parameter :: sssml = real(radix(0._sp), sp)**( - floor( &
83  (minexponent(0._sp) - digits(0._sp)) * 0.5_sp))
84 ! sbig = 1/S, where S was defined in https://doi.org/10.1145/355769.355771
85  real(sp), parameter :: ssbig = real(radix(0._sp), sp)**( - ceiling( &
86  (maxexponent(0._sp) + digits(0._sp) - 1) * 0.5_sp))
87 
88 ! Standard constants for
89  integer, parameter :: dp = kind(1.d0)
90 
91  real(dp), parameter :: dzero = 0.0_dp
92  real(dp), parameter :: dhalf = 0.5_dp
93  real(dp), parameter :: done = 1.0_dp
94  real(dp), parameter :: dtwo = 2.0_dp
95  real(dp), parameter :: dthree = 3.0_dp
96  real(dp), parameter :: dfour = 4.0_dp
97  real(dp), parameter :: deight = 8.0_dp
98  real(dp), parameter :: dten = 10.0_dp
99  complex(dp), parameter :: zzero = ( 0.0_dp, 0.0_dp )
100  complex(dp), parameter :: zhalf = ( 0.5_dp, 0.0_dp )
101  complex(dp), parameter :: zone = ( 1.0_dp, 0.0_dp )
102  character*1, parameter :: dprefix = 'D'
103  character*1, parameter :: zprefix = 'Z'
104 
105 ! Scaling constants
106  real(dp), parameter :: dulp = epsilon(0._dp)
107  real(dp), parameter :: deps = dulp * 0.5_dp
108  real(dp), parameter :: dsafmin = real(radix(0._dp),dp)**max( &
109  minexponent(0._dp)-1, &
110  1-maxexponent(0._dp) &
111  )
112  real(dp), parameter :: dsafmax = done / dsafmin
113  real(dp), parameter :: dsmlnum = dsafmin / dulp
114  real(dp), parameter :: dbignum = dsafmax * dulp
115  real(dp), parameter :: drtmin = sqrt(dsmlnum)
116  real(dp), parameter :: drtmax = sqrt(dbignum)
117 
118 ! Blue's scaling constants
119  real(dp), parameter :: dtsml = real(radix(0._dp), dp)**ceiling( &
120  (minexponent(0._dp) - 1) * 0.5_dp)
121  real(dp), parameter :: dtbig = real(radix(0._dp), dp)**floor( &
122  (maxexponent(0._dp) - digits(0._dp) + 1) * 0.5_dp)
123 ! ssml >= 1/s, where s was defined in https://doi.org/10.1145/355769.355771
124 ! The correction was added in https://doi.org/10.1145/3061665 to scale denormalized numbers correctly
125  real(dp), parameter :: dssml = real(radix(0._dp), dp)**( - floor( &
126  (minexponent(0._dp) - digits(0._dp)) * 0.5_dp))
127 ! sbig = 1/S, where S was defined in https://doi.org/10.1145/355769.355771
128  real(dp), parameter :: dsbig = real(radix(0._dp), dp)**( - ceiling( &
129  (maxexponent(0._dp) + digits(0._dp) - 1) * 0.5_dp))
130 
131 end module la_constants
LA_CONSTANTS is a module for the scaling constants for the compiled Fortran single and double precisi...