This source file includes following definitions.
- acosl
- acosl
- main
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 #include <config.h>
30
31
32 #include <math.h>
33
34 #if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
35
36 long double
37 acosl (long double x)
38 {
39 return acos (x);
40 }
41
42 #else
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 static const long double
70 one = 1.0L,
71 huge = 1.0e+4932L,
72 pi = 3.1415926535897932384626433832795028841972L,
73 pio2_hi = 1.5707963267948966192313216916397514420986L,
74 pio2_lo = 4.3359050650618905123985220130216759843812E-35L,
75 pio4_hi = 7.8539816339744830961566084581987569936977E-1L,
76
77
78
79
80
81
82 pS0 = -8.358099012470680544198472400254596543711E2L,
83 pS1 = 3.674973957689619490312782828051860366493E3L,
84 pS2 = -6.730729094812979665807581609853656623219E3L,
85 pS3 = 6.643843795209060298375552684423454077633E3L,
86 pS4 = -3.817341990928606692235481812252049415993E3L,
87 pS5 = 1.284635388402653715636722822195716476156E3L,
88 pS6 = -2.410736125231549204856567737329112037867E2L,
89 pS7 = 2.219191969382402856557594215833622156220E1L,
90 pS8 = -7.249056260830627156600112195061001036533E-1L,
91 pS9 = 1.055923570937755300061509030361395604448E-3L,
92
93 qS0 = -5.014859407482408326519083440151745519205E3L,
94 qS1 = 2.430653047950480068881028451580393430537E4L,
95 qS2 = -4.997904737193653607449250593976069726962E4L,
96 qS3 = 5.675712336110456923807959930107347511086E4L,
97 qS4 = -3.881523118339661268482937768522572588022E4L,
98 qS5 = 1.634202194895541569749717032234510811216E4L,
99 qS6 = -4.151452662440709301601820849901296953752E3L,
100 qS7 = 5.956050864057192019085175976175695342168E2L,
101 qS8 = -4.175375777334867025769346564600396877176E1L,
102
103
104
105
106
107 rS0 = -5.619049346208901520945464704848780243887E0L,
108 rS1 = 4.460504162777731472539175700169871920352E1L,
109 rS2 = -1.317669505315409261479577040530751477488E2L,
110 rS3 = 1.626532582423661989632442410808596009227E2L,
111 rS4 = -3.144806644195158614904369445440583873264E1L,
112 rS5 = -9.806674443470740708765165604769099559553E1L,
113 rS6 = 5.708468492052010816555762842394927806920E1L,
114 rS7 = 1.396540499232262112248553357962639431922E1L,
115 rS8 = -1.126243289311910363001762058295832610344E1L,
116 rS9 = -4.956179821329901954211277873774472383512E-1L,
117 rS10 = 3.313227657082367169241333738391762525780E-1L,
118
119 sS0 = -4.645814742084009935700221277307007679325E0L,
120 sS1 = 3.879074822457694323970438316317961918430E1L,
121 sS2 = -1.221986588013474694623973554726201001066E2L,
122 sS3 = 1.658821150347718105012079876756201905822E2L,
123 sS4 = -4.804379630977558197953176474426239748977E1L,
124 sS5 = -1.004296417397316948114344573811562952793E2L,
125 sS6 = 7.530281592861320234941101403870010111138E1L,
126 sS7 = 1.270735595411673647119592092304357226607E1L,
127 sS8 = -1.815144839646376500705105967064792930282E1L,
128 sS9 = -7.821597334910963922204235247786840828217E-2L,
129
130
131 asinr5625 = 5.9740641664535021430381036628424864397707E-1L;
132
133
134 long double
135 acosl (long double x)
136 {
137 long double t, p, q;
138
139 if (x < 0.0L)
140 {
141 t = pi - acosl (-x);
142 if (huge + x > one)
143 return t;
144 }
145
146 if (x >= 1.0L)
147 {
148 if (x == 1.0L)
149 return 0.0L;
150
151 return (x - x) / (x - x);
152 }
153
154 else if (x < 0.5L)
155 {
156 if (x < 0.000000000000000006938893903907228377647697925567626953125L)
157
158 return x * pio2_hi + x * pio2_lo;
159
160 t = x * x;
161 p = (((((((((pS9 * t
162 + pS8) * t
163 + pS7) * t
164 + pS6) * t
165 + pS5) * t
166 + pS4) * t
167 + pS3) * t
168 + pS2) * t
169 + pS1) * t
170 + pS0) * t;
171
172 q = (((((((( t
173 + qS8) * t
174 + qS7) * t
175 + qS6) * t
176 + qS5) * t
177 + qS4) * t
178 + qS3) * t
179 + qS2) * t
180 + qS1) * t
181 + qS0;
182
183 return pio2_hi - (x + x * (p / q) - pio2_lo);
184 }
185
186 else if (x < 0.625)
187 {
188 t = x - 0.5625;
189 p = ((((((((((rS10 * t
190 + rS9) * t
191 + rS8) * t
192 + rS7) * t
193 + rS6) * t
194 + rS5) * t
195 + rS4) * t
196 + rS3) * t
197 + rS2) * t
198 + rS1) * t
199 + rS0) * t;
200
201 q = ((((((((( t
202 + sS9) * t
203 + sS8) * t
204 + sS7) * t
205 + sS6) * t
206 + sS5) * t
207 + sS4) * t
208 + sS3) * t
209 + sS2) * t
210 + sS1) * t
211 + sS0;
212
213 return (pio2_hi - asinr5625) - (p / q - pio2_lo);
214 }
215 else
216 return 2 * asinl (sqrtl ((1 - x) / 2));
217 }
218
219 #endif
220
221 #if 0
222 int
223 main (void)
224 {
225 printf ("%.18Lg %.18Lg\n",
226 acosl (1.0L),
227 1.5707963267948966192313216916397514420984L -
228 1.5707963267948966192313216916397514420984L);
229 printf ("%.18Lg %.18Lg\n",
230 acosl (0.7071067811865475244008443621048490392848L),
231 1.5707963267948966192313216916397514420984L -
232 0.7853981633974483096156608458198757210492L);
233 printf ("%.18Lg %.18Lg\n",
234 acosl (0.5L),
235 1.5707963267948966192313216916397514420984L -
236 0.5235987755982988730771072305465838140328L);
237 printf ("%.18Lg %.18Lg\n",
238 acosl (0.3090169943749474241022934171828190588600L),
239 1.5707963267948966192313216916397514420984L -
240 0.3141592653589793238462643383279502884196L);
241 printf ("%.18Lg %.18Lg\n",
242 acosl (-1.0L),
243 1.5707963267948966192313216916397514420984L -
244 -1.5707963267948966192313216916397514420984L);
245 printf ("%.18Lg %.18Lg\n",
246 acosl (-0.7071067811865475244008443621048490392848L),
247 1.5707963267948966192313216916397514420984L -
248 -0.7853981633974483096156608458198757210492L);
249 printf ("%.18Lg %.18Lg\n",
250 acosl (-0.5L),
251 1.5707963267948966192313216916397514420984L -
252 -0.5235987755982988730771072305465838140328L);
253 printf ("%.18Lg %.18Lg\n",
254 acosl (-0.3090169943749474241022934171828190588600L),
255 1.5707963267948966192313216916397514420984L -
256 -0.3141592653589793238462643383279502884196L);
257 }
258 #endif