This source file includes following definitions.
- logl
- logl
- logl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #include <config.h>
17
18
19 #include <math.h>
20
21 #if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
22
23 long double
24 logl (long double x)
25 {
26 return log (x);
27 }
28
29 #elif 0
30
31 long double
32 logl (long double x)
33 # undef logl
34 {
35
36 if (x == 0.0L)
37
38 return -1.0L / 0.0L;
39 return logl (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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93 static const long double
94 l3 = 3.333333333333333333333333333333336096926E-1L,
95 l4 = -2.499999999999999999999999999486853077002E-1L,
96 l5 = 1.999999999999999999999999998515277861905E-1L,
97 l6 = -1.666666666666666666666798448356171665678E-1L,
98 l7 = 1.428571428571428571428808945895490721564E-1L,
99 l8 = -1.249999999999999987884655626377588149000E-1L,
100 l9 = 1.111111111111111093947834982832456459186E-1L,
101 l10 = -1.000000000000532974938900317952530453248E-1L,
102 l11 = 9.090909090915566247008015301349979892689E-2L,
103 l12 = -8.333333211818065121250921925397567745734E-2L,
104 l13 = 7.692307559897661630807048686258659316091E-2L,
105 l14 = -7.144242754190814657241902218399056829264E-2L,
106 l15 = 6.668057591071739754844678883223432347481E-2L;
107
108
109
110
111 static const long double logtbl[92] = {
112 -5.5345593589352099112142921677820359632418E-2L,
113 -5.2108257402767124761784665198737642086148E-2L,
114 -4.8991686870576856279407775480686721935120E-2L,
115 -4.5993270766361228596215288742353061431071E-2L,
116 -4.3110481649613269682442058976885699556950E-2L,
117 -4.0340872319076331310838085093194799765520E-2L,
118 -3.7682072451780927439219005993827431503510E-2L,
119 -3.5131785416234343803903228503274262719586E-2L,
120 -3.2687785249045246292687241862699949178831E-2L,
121 -3.0347913785027239068190798397055267411813E-2L,
122 -2.8110077931525797884641940838507561326298E-2L,
123 -2.5972247078357715036426583294246819637618E-2L,
124 -2.3932450635346084858612873953407168217307E-2L,
125 -2.1988775689981395152022535153795155900240E-2L,
126 -2.0139364778244501615441044267387667496733E-2L,
127 -1.8382413762093794819267536615342902718324E-2L,
128 -1.6716169807550022358923589720001638093023E-2L,
129 -1.5138929457710992616226033183958974965355E-2L,
130 -1.3649036795397472900424896523305726435029E-2L,
131 -1.2244881690473465543308397998034325468152E-2L,
132 -1.0924898127200937840689817557742469105693E-2L,
133 -9.6875626072830301572839422532631079809328E-3L,
134 -8.5313926245226231463436209313499745894157E-3L,
135 -7.4549452072765973384933565912143044991706E-3L,
136 -6.4568155251217050991200599386801665681310E-3L,
137 -5.5356355563671005131126851708522185605193E-3L,
138 -4.6900728132525199028885749289712348829878E-3L,
139 -3.9188291218610470766469347968659624282519E-3L,
140 -3.2206394539524058873423550293617843896540E-3L,
141 -2.5942708080877805657374888909297113032132E-3L,
142 -2.0385211375711716729239156839929281289086E-3L,
143 -1.5522183228760777967376942769773768850872E-3L,
144 -1.1342191863606077520036253234446621373191E-3L,
145 -7.8340854719967065861624024730268350459991E-4L,
146 -4.9869831458030115699628274852562992756174E-4L,
147 -2.7902661731604211834685052867305795169688E-4L,
148 -1.2335696813916860754951146082826952093496E-4L,
149 -3.0677461025892873184042490943581654591817E-5L,
150 # define ZERO logtbl[38]
151 0.0000000000000000000000000000000000000000E0L,
152 -3.0359557945051052537099938863236321874198E-5L,
153 -1.2081346403474584914595395755316412213151E-4L,
154 -2.7044071846562177120083903771008342059094E-4L,
155 -4.7834133324631162897179240322783590830326E-4L,
156 -7.4363569786340080624467487620270965403695E-4L,
157 -1.0654639687057968333207323853366578860679E-3L,
158 -1.4429854811877171341298062134712230604279E-3L,
159 -1.8753781835651574193938679595797367137975E-3L,
160 -2.3618380914922506054347222273705859653658E-3L,
161 -2.9015787624124743013946600163375853631299E-3L,
162 -3.4938307889254087318399313316921940859043E-3L,
163 -4.1378413103128673800485306215154712148146E-3L,
164 -4.8328735414488877044289435125365629849599E-3L,
165 -5.5782063183564351739381962360253116934243E-3L,
166 -6.3731336597098858051938306767880719015261E-3L,
167 -7.2169643436165454612058905294782949315193E-3L,
168 -8.1090214990427641365934846191367315083867E-3L,
169 -9.0486422112807274112838713105168375482480E-3L,
170 -1.0035177140880864314674126398350812606841E-2L,
171 -1.1067990155502102718064936259435676477423E-2L,
172 -1.2146457974158024928196575103115488672416E-2L,
173 -1.3269969823361415906628825374158424754308E-2L,
174 -1.4437927104692837124388550722759686270765E-2L,
175 -1.5649743073340777659901053944852735064621E-2L,
176 -1.6904842527181702880599758489058031645317E-2L,
177 -1.8202661505988007336096407340750378994209E-2L,
178 -1.9542647000370545390701192438691126552961E-2L,
179 -2.0924256670080119637427928803038530924742E-2L,
180 -2.2346958571309108496179613803760727786257E-2L,
181 -2.3810230892650362330447187267648486279460E-2L,
182 -2.5313561699385640380910474255652501521033E-2L,
183 -2.6856448685790244233704909690165496625399E-2L,
184 -2.8438398935154170008519274953860128449036E-2L,
185 -3.0058928687233090922411781058956589863039E-2L,
186 -3.1717563112854831855692484086486099896614E-2L,
187 -3.3413836095418743219397234253475252001090E-2L,
188 -3.5147290019036555862676702093393332533702E-2L,
189 -3.6917475563073933027920505457688955423688E-2L,
190 -3.8723951502862058660874073462456610731178E-2L,
191 -4.0566284516358241168330505467000838017425E-2L,
192 -4.2444048996543693813649967076598766917965E-2L,
193 -4.4356826869355401653098777649745233339196E-2L,
194 -4.6304207416957323121106944474331029996141E-2L,
195 -4.8285787106164123613318093945035804818364E-2L,
196 -5.0301169421838218987124461766244507342648E-2L,
197 -5.2349964705088137924875459464622098310997E-2L,
198 -5.4431789996103111613753440311680967840214E-2L,
199 -5.6546268881465384189752786409400404404794E-2L,
200 -5.8693031345788023909329239565012647817664E-2L,
201 -6.0871713627532018185577188079210189048340E-2L,
202 -6.3081958078862169742820420185833800925568E-2L,
203 -6.5323413029406789694910800219643791556918E-2L,
204 -6.7595732653791419081537811574227049288168E-2L
205 };
206
207
208 static const long double
209 ln2a = 6.93145751953125e-1L,
210 ln2b = 1.4286068203094172321214581765680755001344E-6L;
211
212 long double
213 logl (long double x)
214 {
215 long double z, y, w;
216 long double t;
217 int k, e;
218
219
220
221
222 if (isnanl (x))
223 {
224 return x;
225 }
226
227 if (x == 0.0L)
228 {
229 return -0.5L / ZERO;
230 }
231
232 if (x < 0.0L)
233 {
234 return (x - x) / ZERO;
235 }
236
237 if (x + x == x)
238 {
239 return x + x;
240 }
241
242
243 x = frexpl (x, &e);
244 if (x < 0.703125L)
245 {
246 x += x;
247 e--;
248 }
249
250
251 if ((x <= 1.0078125L) && (x >= 0.9921875L))
252 {
253 z = x - 1.0L;
254 k = 64;
255 t = 1.0L;
256 }
257 else
258 {
259 k = floorl ((x - 0.5L) * 128.0L);
260 t = 0.5L + k / 128.0L;
261 z = (x - t) / t;
262 }
263
264
265 w = z * z;
266 y = ((((((((((((l15 * z
267 + l14) * z
268 + l13) * z
269 + l12) * z
270 + l11) * z
271 + l10) * z
272 + l9) * z
273 + l8) * z
274 + l7) * z
275 + l6) * z
276 + l5) * z
277 + l4) * z
278 + l3) * z * w;
279 y -= 0.5 * w;
280 y += e * ln2b;
281 y += z;
282 y += logtbl[k-26];
283 y += (t - 1.0L);
284 y += e * ln2a;
285 return y;
286 }
287
288 #endif