PR inline-asm/84742
[official-gcc.git] / gcc / testsuite / gfortran.dg / dec_math.f90
blob2a50f976543fbfe4de72f5fa1aaf1a7a1840d74f
1 ! { dg-options "-fdec-math" }
2 ! { dg-do run }
4 ! Test extra math intrinsics offered by -fdec-math.
7 subroutine cmpf(f1, f2, tolerance, str)
8 implicit none
9 real(4), intent(in) :: f1, f2, tolerance
10 character(len=*), intent(in) :: str
11 if ( abs(f2 - f1) .gt. tolerance ) then
12 write (*, '(A,F12.6,F12.6)') str, f1, f2
13 STOP 1
14 endif
15 endsubroutine
17 subroutine cmpd(d1, d2, tolerance, str)
18 implicit none
19 real(8), intent(in) :: d1, d2, tolerance
20 character(len=*), intent(in) :: str
21 if ( dabs(d2 - d1) .gt. tolerance ) then
22 write (*, '(A,F12.6,F12.6)') str, d1, d2
23 STOP 2
24 endif
25 endsubroutine
27 implicit none
29 real(4), parameter :: pi_f = (4.0_4 * atan(1.0_4))
30 real(8), parameter :: pi_d = (4.0_8 * datan(1.0_8))
31 real(4), parameter :: r2d_f = 180.0_4 / pi_f
32 real(8), parameter :: r2d_d = 180.0_8 / pi_d
33 real(4), parameter :: d2r_f = pi_f / 180.0_4
34 real(8), parameter :: d2r_d = pi_d / 180.0_8
36 ! inputs
37 real(4) :: f_i1, f_i2
38 real(4), volatile :: xf
39 real(8) :: d_i1, d_i2
40 real(8), volatile :: xd
42 ! expected outputs from (oe) default (oxe) expression
43 real(4) :: f_oe, f_oxe
44 real(8) :: d_oe, d_oxe
46 ! actual outputs from (oa) default (oc) constant (ox) expression
47 real(4) :: f_oa, f_oc, f_ox
48 real(8) :: d_oa, d_oc, d_ox
50 ! tolerance of the answer: assert |exp-act| <= tol
51 real(4) :: f_tol
52 real(8) :: d_tol
54 ! equivalence tolerance
55 f_tol = 5e-5_4
56 d_tol = 5e-6_8
58 ! multiplication factors to test non-constant expressions
59 xf = 2.0_4
60 xd = 2.0_8
62 ! Input
63 f_i1 = 0.68032123_4
64 d_i1 = 0.68032123_8
66 ! Expected
67 f_oe = r2d_f*acos (f_i1)
68 f_oxe = xf*r2d_f*acos (f_i1)
69 d_oe = r2d_d*dacos(d_i1)
70 d_oxe = xd*r2d_d*dacos(d_i1)
72 ! Actual
73 f_oa = acosd (f_i1)
74 f_oc = acosd (0.68032123_4)
75 f_ox = xf*acosd (f_i1)
76 d_oa = dacosd (d_i1)
77 d_oc = dacosd (0.68032123_8)
78 d_ox = xd*dacosd (0.68032123_8)
80 call cmpf(f_oe, f_oa, f_tol, "( ) acosd")
81 call cmpf(f_oe, f_oc, f_tol, "(c) acosd")
82 call cmpf(f_oxe, f_ox, f_tol, "(x) acosd")
83 call cmpd(d_oe, d_oa, d_tol, "( ) dacosd")
84 call cmpd(d_oe, d_oc, d_tol, "(c) dacosd")
85 call cmpd(d_oxe, d_ox, d_tol, "(x) dacosd")
87 ! Input
88 f_i1 = 60.0_4
89 d_i1 = 60.0_8
91 ! Expected
92 f_oe = cos (d2r_f*f_i1)
93 f_oxe = xf*cos (d2r_f*f_i1)
94 d_oe = cos (d2r_d*d_i1)
95 d_oxe = xd*cos (d2r_d*d_i1)
97 ! Actual
98 f_oa = cosd (f_i1)
99 f_oc = cosd (60.0_4)
100 f_ox = xf* cosd (f_i1)
101 d_oa = dcosd (d_i1)
102 d_oc = dcosd (60.0_8)
103 d_ox = xd* cosd (d_i1)
105 call cmpf(f_oe, f_oa, f_tol, "( ) cosd")
106 call cmpf(f_oe, f_oc, f_tol, "(c) cosd")
107 call cmpf(f_oxe, f_ox, f_tol, "(x) cosd")
108 call cmpd(d_oe, d_oa, d_tol, "( ) dcosd")
109 call cmpd(d_oe, d_oc, d_tol, "(c) dcosd")
110 call cmpd(d_oxe, d_ox, d_tol, "(x) cosd")
112 ! Input
113 f_i1 = 0.79345021_4
114 d_i1 = 0.79345021_8
116 ! Expected
117 f_oe = r2d_f*asin (f_i1)
118 f_oxe = xf*r2d_f*asin (f_i1)
119 d_oe = r2d_d*asin (d_i1)
120 d_oxe = xd*r2d_d*asin (d_i1)
122 ! Actual
123 f_oa = asind (f_i1)
124 f_oc = asind (0.79345021_4)
125 f_ox = xf* asind (f_i1)
126 d_oa = dasind (d_i1)
127 d_oc = dasind (0.79345021_8)
128 d_ox = xd* asind (d_i1)
130 call cmpf(f_oe, f_oa, f_tol, "( ) asind")
131 call cmpf(f_oe, f_oc, f_tol, "(c) asind")
132 call cmpf(f_oxe, f_ox, f_tol, "(x) asind")
133 call cmpd(d_oe, d_oa, d_tol, "( ) dasind")
134 call cmpd(d_oe, d_oc, d_tol, "(c) dasind")
135 call cmpd(d_oxe, d_ox, d_tol, "(x) asind")
137 ! Input
138 f_i1 = 60.0_4
139 d_i1 = 60.0_8
141 ! Expected
142 f_oe = sin (d2r_f*f_i1)
143 f_oxe = xf*sin (d2r_f*f_i1)
144 d_oe = sin (d2r_d*d_i1)
145 d_oxe = xd*sin (d2r_d*d_i1)
147 ! Actual
148 f_oa = sind (f_i1)
149 f_oc = sind (60.0_4)
150 f_ox = xf* sind (f_i1)
151 d_oa = dsind (d_i1)
152 d_oc = dsind (60.0_8)
153 d_ox = xd* sind (d_i1)
155 call cmpf(f_oe, f_oa, f_tol, "( ) sind")
156 call cmpf(f_oe, f_oc, f_tol, "(c) sind")
157 call cmpf(f_oxe, f_ox, f_tol, "(x) sind")
158 call cmpd(d_oe, d_oa, d_tol, "( ) dsind")
159 call cmpd(d_oe, d_oc, d_tol, "(c) dsind")
160 call cmpd(d_oxe, d_ox, d_tol, "(x) sind")
162 ! Input
163 f_i1 = 2.679676_4
164 f_i2 = 1.0_4
165 d_i1 = 2.679676_8
166 d_i2 = 1.0_8
168 ! Expected
169 f_oe = r2d_f*atan2 (f_i1, f_i2)
170 f_oxe = xf*r2d_f*atan2 (f_i1, f_i2)
171 d_oe = r2d_d*atan2 (d_i1, d_i2)
172 d_oxe = xd*r2d_d*atan2 (d_i1, d_i2)
174 ! Actual
175 f_oa = atan2d (f_i1, f_i2)
176 f_oc = atan2d (2.679676_4, 1.0_4)
177 f_ox = xf* atan2d (f_i1, f_i2)
178 d_oa = datan2d (d_i1, d_i2)
179 d_oc = datan2d (2.679676_8, 1.0_8)
180 d_ox = xd* atan2d (d_i1, d_i2)
182 call cmpf(f_oe, f_oa, f_tol, "( ) atan2d")
183 call cmpf(f_oe, f_oc, f_tol, "(c) atan2d")
184 call cmpf(f_oxe, f_ox, f_tol, "(x) atan2d")
185 call cmpd(d_oe, d_oa, d_tol, "( ) datan2d")
186 call cmpd(d_oe, d_oc, d_tol, "(c) datan2d")
187 call cmpd(d_oxe, d_ox, d_tol, "(x) atan2d")
189 ! Input
190 f_i1 = 1.5874993_4
191 d_i1 = 1.5874993_8
193 ! Expected
194 f_oe = r2d_f*atan (f_i1)
195 f_oxe = xf*r2d_f*atan (f_i1)
196 d_oe = r2d_d*atan (d_i1)
197 d_oxe = xd*r2d_d*atan (d_i1)
199 ! Actual
200 f_oa = atand (f_i1)
201 f_oc = atand (1.5874993_4)
202 f_ox = xf* atand (f_i1)
203 d_oa = datand (d_i1)
204 d_oc = datand (1.5874993_8)
205 d_ox = xd* atand (d_i1)
207 call cmpf(f_oe, f_oa, f_tol, "( ) atand")
208 call cmpf(f_oe, f_oc, f_tol, "(c) atand")
209 call cmpf(f_oxe, f_ox, f_tol, "(x) atand")
210 call cmpd(d_oe, d_oa, d_tol, "( ) datand")
211 call cmpd(d_oe, d_oc, d_tol, "(c) datand")
212 call cmpd(d_oxe, d_ox, d_tol, "(x) atand")
214 ! Input
215 f_i1 = 0.6_4
216 d_i1 = 0.6_8
218 ! Expected
219 f_oe = cotan (d2r_f*f_i1)
220 f_oxe = xf*cotan (d2r_f*f_i1)
221 d_oe = cotan (d2r_d*d_i1)
222 d_oxe = xd*cotan (d2r_d*d_i1)
224 ! Actual
225 f_oa = cotand (f_i1)
226 f_oc = cotand (0.6_4)
227 f_ox = xf* cotand (f_i1)
228 d_oa = dcotand (d_i1)
229 d_oc = dcotand (0.6_8)
230 d_ox = xd* cotand (d_i1)
232 call cmpf(f_oe, f_oa, f_tol, "( ) cotand")
233 call cmpf(f_oe, f_oc, f_tol, "(c) cotand")
234 call cmpf(f_oxe, f_ox, f_tol, "(x) cotand")
235 call cmpd(d_oe, d_oa, d_tol, "( ) dcotand")
236 call cmpd(d_oe, d_oc, d_tol, "(c) dcotand")
237 call cmpd(d_oxe, d_ox, d_tol, "(x) cotand")
239 ! Input
240 f_i1 = 0.6_4
241 d_i1 = 0.6_8
243 ! Expected
244 f_oe = 1.0_4/tan (f_i1)
245 f_oxe = xf* 1.0_4/tan (f_i1)
246 d_oe = 1.0_8/dtan (d_i1)
247 d_oxe = xd*1.0_8/dtan (d_i1)
249 ! Actual
250 f_oa = cotan (f_i1)
251 f_oc = cotan (0.6_4)
252 f_ox = xf* cotan (f_i1)
253 d_oa = dcotan (d_i1)
254 d_oc = dcotan (0.6_8)
255 d_ox = xd* cotan (d_i1)
257 call cmpf(f_oe, f_oa, f_tol, "( ) cotan")
258 call cmpf(f_oe, f_oc, f_tol, "(c) cotan")
259 call cmpf(f_oxe, f_ox, f_tol, "(x) cotan")
260 call cmpd(d_oe, d_oa, d_tol, "( ) dcotan")
261 call cmpd(d_oe, d_oc, d_tol, "(c) dcotan")
262 call cmpd(d_oxe, d_ox, d_tol, "(x) cotan")
264 ! Input
265 f_i1 = 60.0_4
266 d_i1 = 60.0_8
268 ! Expected
269 f_oe = tan (d2r_f*f_i1)
270 f_oxe = xf*tan (d2r_f*f_i1)
271 d_oe = tan (d2r_d*d_i1)
272 d_oxe = xd*tan (d2r_d*d_i1)
274 ! Actual
275 f_oa = tand (f_i1)
276 f_oc = tand (60.0_4)
277 f_ox = xf* tand (f_i1)
278 d_oa = dtand (d_i1)
279 d_oc = dtand (60.0_8)
280 d_ox = xd* tand (d_i1)
282 call cmpf(f_oe, f_oa, f_tol, "( ) tand")
283 call cmpf(f_oe, f_oc, f_tol, "(c) tand")
284 call cmpf(f_oxe, f_ox, f_tol, "(x) tand")
285 call cmpd(d_oe, d_oa, d_tol, "( ) dtand")
286 call cmpd(d_oe, d_oc, d_tol, "(c) dtand")
287 call cmpd(d_oxe, d_ox, d_tol, "(x) tand")