File: la_constants.f90

package info (click to toggle)
lfortran 0.45.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 46,332 kB
  • sloc: cpp: 137,068; f90: 51,260; python: 6,444; ansic: 4,277; yacc: 2,285; fortran: 806; sh: 524; makefile: 30; javascript: 15
file content (250 lines) | stat: -rw-r--r-- 8,160 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
module la_constants_module

integer, parameter :: sp = kind(1.e0)
 
real(sp), parameter :: szero = 0.0_sp
 
real(sp), parameter :: shalf = 0.5_sp
 
real(sp), parameter :: sone = 1.0_sp
 
real(sp), parameter :: stwo = 2.0_sp
 
real(sp), parameter :: sthree = 3.0_sp
 
real(sp), parameter :: sfour = 4.0_sp
 
real(sp), parameter :: seight = 8.0_sp
 
real(sp), parameter :: sten = 10.0_sp
 
complex(sp), parameter :: czero = ( 0.0_sp, 0.0_sp )
 
complex(sp), parameter :: chalf = ( 0.5_sp, 0.0_sp )
 
complex(sp), parameter :: cone = ( 1.0_sp, 0.0_sp )
 
character *1, parameter :: sprefix = 'S'
 
character *1, parameter :: cprefix = 'C'
 
real(sp), parameter :: sulp = epsilon(0._sp)
 
real(sp), parameter :: seps = sulp * 0.5_sp
 
real(sp), parameter :: ssafmin = real(radix(0._sp), sp)**max( minexponent(0._sp)-1, 1-maxexponent(0._sp) )

real(sp), parameter :: ssafmax = sone / ssafmin

real(sp), parameter :: ssmlnum = ssafmin / sulp
 
real(sp), parameter :: sbignum = ssafmax * sulp
 
real(sp), parameter :: srtmin = sqrt(ssmlnum)
 
real(sp), parameter :: srtmax = sqrt(sbignum)
 
real(sp), parameter :: stsml = real(radix(0._sp), sp)**ceiling( (minexponent(0._sp) - 1) * 0.5_sp)
 
real(sp), parameter :: stbig = real(radix(0._sp), sp)**floor( (maxexponent(0._sp) - digits(0._sp) + 1) * 0.5_sp)
 
real(sp), parameter :: sssml = real(radix(0._sp), sp)**( - floor( (minexponent(0._sp) - digits(0._sp)) * 0.5_sp))
 
real(sp), parameter :: ssbig = real(radix(0._sp), sp)**( - ceiling( (maxexponent(0._sp) + digits(0._sp) - 1) * 0.5_sp))
 
integer, parameter :: dp = kind(1.d0)
 
real(dp), parameter :: dzero = 0.0_dp
 
real(dp), parameter :: dhalf = 0.5_dp
 
real(dp), parameter :: done = 1.0_dp
 
real(dp), parameter :: dtwo = 2.0_dp
 
real(dp), parameter :: dthree = 3.0_dp
 
real(dp), parameter :: dfour = 4.0_dp
 
real(dp), parameter :: deight = 8.0_dp
 
real(dp), parameter :: dten = 10.0_dp
 
complex(dp), parameter :: zzero = ( 0.0_dp, 0.0_dp )
 
complex(dp), parameter :: zhalf = ( 0.5_dp, 0.0_dp )
 
complex(dp), parameter :: zone = ( 1.0_dp, 0.0_dp )
 
character *1, parameter :: dprefix = 'D'
 
character *1, parameter :: zprefix = 'Z'
 
real(dp), parameter :: dulp = epsilon(0._dp)
 
real(dp), parameter :: deps = dulp * 0.5_dp
 
real(dp), parameter :: dsafmin = real(radix(0._dp), dp)**max( minexponent(0._dp)-1, 1-maxexponent(0._dp) )
 
real(dp), parameter :: dsafmax = done / dsafmin
 
real(dp), parameter :: dsmlnum = dsafmin / dulp
 
real(dp), parameter :: dbignum = dsafmax * dulp
 
real(dp), parameter :: drtmin = sqrt(dsmlnum)
 
real(dp), parameter :: drtmax = sqrt(dbignum)
 
real(dp), parameter :: dtsml = real(radix(0._dp), dp)**ceiling( (minexponent(0._dp) - 1) * 0.5_dp)
 
real(dp), parameter :: dtbig = real(radix(0._dp), dp)**floor( (maxexponent(0._dp) - digits(0._dp) + 1) * 0.5_dp)
 
real(dp), parameter :: dssml = real(radix(0._dp), dp)**( - floor( (minexponent(0._dp) - digits(0._dp)) * 0.5_dp))
 
real(dp), parameter :: dsbig = real(radix(0._dp), dp)**( - ceiling( (maxexponent(0._dp) + digits(0._dp) - 1) * 0.5_dp))
end module

program la_constants
use la_constants_module

print *, "szero: ", szero
if ( abs( szero - 0.0_sp) > 1.0e-8) error stop "szero test failed"

print *, "shalf: ", shalf
if ( abs( shalf - 0.5_sp) > 1.0e-8) error stop "shalf test failed"

print *, "sone: ", sone
if ( abs( sone - 1.0_sp) > 1.0e-8) error stop "sone test failed"

print *, "stwo: ", stwo
if ( abs( stwo - 2.0_sp) > 1.0e-8) error stop "stwo test failed"

print *,"sthree: ", sthree
if( abs( sthree - 3.0_sp) > 1.0e-8) error stop "sthree test failed"

print *, "sfour: ", sfour
if ( abs( sfour - 4.0_sp) > 1.0e-8) error stop "sfour test failed"

print *, "seight: ", seight
if ( abs( seight - 8.0_sp) > 1.0e-8) error stop "seight test failed"

print *, "sten: ", sten
if ( abs( sten - 10.0_sp) > 1.0e-8) error stop "sten test failed"

print *, "czero: ", czero
if ( abs( real(czero) - 0.0_sp) > 1.0e-8  .or. abs( aimag(czero) - 0.0_sp) > 1.0e-8)  error stop "czero test failed"

print *, "chalf: ", chalf
if ( abs( real(chalf) - 0.5_sp) > 1.0e-8  .or. abs( aimag(czero) - 0.0_sp) > 1.0e-8) error stop "chalf test failed"

print *, "cone: ", cone
if ( abs( real(cone) - 1.0_sp) > 1.0e-8  .or. abs( aimag(czero) - 0.0_sp) > 1.0e-8) error stop "cone test failed"

print *, "sulp: ", sulp
if (abs (sulp - 1.19209290e-7) > 1.0e-8) error stop "sulp test failed"

print *, "seps: ", seps
if (abs (seps - 5.96046448e-8) > 1.0e-8) error stop "seps test failed"

print *, "ssafmin: ", ssafmin
if (abs (ssafmin - 1.17549435e-38) > 1.0e-8 ) error stop "ssafmin test failed"

print *, "ssafmax: ", ssafmax 
if (abs (ssafmax - 8.50705917302346159e+37) > 1.0) error stop "ssafmax test failed"

print *, "ssmlnum: ", ssmlnum
if (abs (ssmlnum - 9.86076132e-32) > 1.0e-8 ) error stop "ssmlnum test failed"

print *, "sbignum: ", sbignum
if (abs (sbignum - 1.01412048018258352e+31) > 1.0e-8) error stop "sbignum test failed"

print *, "srtmin: ", srtmin
if (abs (srtmin - 3.14018486e-16) > 1.0e-8) error stop "srtmin test failed"

print *, "srtmax: ", srtmax
if (abs (srtmax - 3.18452583626288650e+15) > 1.0e-8) error stop "srtmax test failed"

print *, "stsml: ", stsml
if (abs (stsml - 1.08420217e-19) > 1.0e-8) error stop "stsml test failed"

print *, "stbig: ", stbig
if (abs (stbig - 4.50359962737049600e+15) > 1.0e-8) error stop "stbig test failed"

print *, "sssml: ", sssml
if (abs (sssml - 3.77789318629571617e+22) > 1.0e-8) error stop "sssml test failed"

print *, "ssbig: ", ssbig
if (abs (ssbig - 1.32348898e-23) > 1.0e-8) error stop "ssbig test failed"

print*, "dzero: ", dzero
if ( abs( dzero - 0.0_dp) > 1.0d-16) error stop "dzero test failed"

print*, "dhalf: ", dhalf
if ( abs( dhalf - 0.5_dp) > 1.0d-16) error stop "dhalf test failed"

print*, "done: ", done
if ( abs( done - 1.0_dp) > 1.0d-16) error stop "done test failed"

print*, "dtwo: ", dtwo
if ( abs( dtwo - 2.0_dp) > 1.0d-16) error stop "dtwo test failed"

print*, "dthree: ", dthree
if ( abs( dthree - 3.0_dp) > 1.0d-16) error stop "dthree test failed"

print*, "dfour: ", dfour
if ( abs( dfour - 4.0_dp) > 1.0d-16) error stop "dfour test failed"

print*, "deight: ", deight
if ( abs( deight - 8.0_dp) > 1.0d-16) error stop "deight test failed"

print*, "dten: ", dten
if ( abs( dten - 10.0_dp) > 1.0d-16) error stop "dten test failed"

print *, "zzero: ", zzero 
if (abs(real(zzero) - 0.0_dp) > 1.0d-16 .or. abs(aimag(zzero) - 0.0_dp) > 1.0d-16) error stop "zzero test failed"

print *, "zhalf :", zhalf
if (abs(real(zhalf) - 0.5_dp) > 1.0d-16 .or. abs(aimag(zhalf) - 0.0_dp) > 1.0d-16) error stop "zhalf test failed"

print *, "zone: ", zone
if (abs(real(zone) - 1.0_dp) > 1.0d-16 .or. abs(aimag(zone) - 0.0_dp) > 1.0d-16) error stop "zone test failed"

print *, "dulp: ", dulp
if ( abs(dulp - 2.22044604925031308d-16) > 1.0d-16 ) error stop "dulp test failed"

print *, "deps: ", deps
if ( abs(deps - 1.11022302462515654d-16) > 1.0d-16 ) error stop "deps test failed"

print *, "dsafmin: ", dsafmin
if ( abs(dsafmin - 2.22507385850720138d-308) > 1.0d-16 ) error stop "dsafmin test failed"

print *, "dsafmax: ", dsafmax
if ( abs(dsafmax - 4.49423283715578977d+307) > 1.0d-16 ) error stop "dsafmax test failed"

print *, "dsmlnum: ", dsmlnum
if ( abs(dsmlnum - 1.00208418000448639d-292) > 1.0d-16 ) error stop "dsmlnum test failed"

print *, "dbignum: ", dbignum
if ( abs(dbignum - 9.97920154767359906d+291) > 1.0d-16 ) error stop "dbignum test failed"

print *, "drtmin: ", drtmin
if ( abs(drtmin - 1.00104154759155046d-146) > 1.0d-16 ) error stop "drtmin test failed"

print *, "drtmax: ", drtmax
if ( abs(drtmax - 9.98959536101117514d+145) > 1.0d-16 ) error stop "drtmax test failed"

print *, "dtsml: ", dtsml
if ( abs(dtsml - 1.49166814624004135d-154) > 1.0d-16 ) error stop "dtsml test failed"

print *, "dtbig: ", dtbig
if ( abs(dtbig - 1.99791907220223503d+146) > 1.0d-16 ) error stop "dtbig test failed"

print *, "dssml: ", dssml
if ( abs(dssml - 4.49891379454319638d+161) > 1.0d-16 ) error stop "dssml test failed"

print *, "dsbig: ", dsbig
if (abs ( dsbig - 1.1137937474253874d-163) > 1.0d-16) error stop "dsbig test failed"

print *, "All tests passed!"
end program