]> git.ipfire.org Git - people/teissler/ipfire-2.x.git/blob - src/patches/glibc/glibc-rh837918.patch
glibc: Update patchset.
[people/teissler/ipfire-2.x.git] / src / patches / glibc / glibc-rh837918.patch
1 diff -Nrup a/math/libm-test.inc b/math/libm-test.inc
2 --- a/math/libm-test.inc 2010-05-04 05:27:23.000000000 -0600
3 +++ b/math/libm-test.inc 2012-08-06 09:54:00.821929695 -0600
4 @@ -2018,6 +2018,142 @@ cos_test (void)
5
6
7 static void
8 +cos_test_tonearest (void)
9 +{
10 + int save_round_mode;
11 + errno = 0;
12 + FUNC(cos) (0);
13 + if (errno == ENOSYS)
14 + /* Function not implemented. */
15 + return;
16 +
17 + START (cos_tonearest);
18 +
19 + save_round_mode = fegetround ();
20 +
21 + if (!fesetround (FE_TONEAREST))
22 + {
23 + TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
24 + TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
25 + TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
26 + TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
27 + TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
28 + TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
29 + TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
30 + TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
31 + TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
32 + TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
33 + }
34 +
35 + fesetround (save_round_mode);
36 +
37 + END (cos_tonearest);
38 +}
39 +
40 +
41 +static void
42 +cos_test_towardzero (void)
43 +{
44 + int save_round_mode;
45 + errno = 0;
46 + FUNC(cos) (0);
47 + if (errno == ENOSYS)
48 + /* Function not implemented. */
49 + return;
50 +
51 + START (cos_towardzero);
52 +
53 + save_round_mode = fegetround ();
54 +
55 + if (!fesetround (FE_TOWARDZERO))
56 + {
57 + TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
58 + TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
59 + TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
60 + TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
61 + TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
62 + TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
63 + TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
64 + TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
65 + TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
66 + TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
67 + }
68 +
69 + fesetround (save_round_mode);
70 +
71 + END (cos_towardzero);
72 +}
73 +
74 +
75 +static void
76 +cos_test_downward (void)
77 +{
78 + int save_round_mode;
79 + errno = 0;
80 + FUNC(cos) (0);
81 + if (errno == ENOSYS)
82 + /* Function not implemented. */
83 + return;
84 +
85 + START (cos_downward);
86 +
87 + save_round_mode = fegetround ();
88 +
89 + if (!fesetround (FE_DOWNWARD))
90 + {
91 + TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
92 + TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
93 + TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
94 + TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
95 + TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
96 + TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
97 + TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
98 + TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
99 + TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
100 + TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
101 + }
102 +
103 + fesetround (save_round_mode);
104 +
105 + END (cos_downward);
106 +}
107 +
108 +
109 +static void
110 +cos_test_upward (void)
111 +{
112 + int save_round_mode;
113 + errno = 0;
114 + FUNC(cos) (0);
115 + if (errno == ENOSYS)
116 + /* Function not implemented. */
117 + return;
118 +
119 + START (cos_upward);
120 +
121 + save_round_mode = fegetround ();
122 +
123 + if (!fesetround (FE_UPWARD))
124 + {
125 + TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
126 + TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
127 + TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
128 + TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
129 + TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
130 + TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
131 + TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
132 + TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
133 + TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
134 + TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
135 + }
136 +
137 + fesetround (save_round_mode);
138 +
139 + END (cos_upward);
140 +}
141 +
142 +
143 +static void
144 cosh_test (void)
145 {
146 errno = 0;
147 @@ -2043,6 +2179,114 @@ cosh_test (void)
148
149
150 static void
151 +cosh_test_tonearest (void)
152 +{
153 + int save_round_mode;
154 + errno = 0;
155 + FUNC(cosh) (0);
156 + if (errno == ENOSYS)
157 + /* Function not implemented. */
158 + return;
159 +
160 + START (cosh_tonearest);
161 +
162 + save_round_mode = fegetround ();
163 +
164 + if (!fesetround (FE_TONEAREST))
165 + {
166 + TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
167 + TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
168 + TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
169 + }
170 +
171 + fesetround (save_round_mode);
172 +
173 + END (cosh_tonearest);
174 +}
175 +
176 +
177 +static void
178 +cosh_test_towardzero (void)
179 +{
180 + int save_round_mode;
181 + errno = 0;
182 + FUNC(cosh) (0);
183 + if (errno == ENOSYS)
184 + /* Function not implemented. */
185 + return;
186 +
187 + START (cosh_towardzero);
188 +
189 + save_round_mode = fegetround ();
190 +
191 + if (!fesetround (FE_TOWARDZERO))
192 + {
193 + TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
194 + TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
195 + TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
196 + }
197 +
198 + fesetround (save_round_mode);
199 +
200 + END (cosh_towardzero);
201 +}
202 +
203 +
204 +static void
205 +cosh_test_downward (void)
206 +{
207 + int save_round_mode;
208 + errno = 0;
209 + FUNC(cosh) (0);
210 + if (errno == ENOSYS)
211 + /* Function not implemented. */
212 + return;
213 +
214 + START (cosh_downward);
215 +
216 + save_round_mode = fegetround ();
217 +
218 + if (!fesetround (FE_DOWNWARD))
219 + {
220 + TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
221 + TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
222 + TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
223 + }
224 +
225 + fesetround (save_round_mode);
226 +
227 + END (cosh_downward);
228 +}
229 +
230 +
231 +static void
232 +cosh_test_upward (void)
233 +{
234 + int save_round_mode;
235 + errno = 0;
236 + FUNC(cosh) (0);
237 + if (errno == ENOSYS)
238 + /* Function not implemented. */
239 + return;
240 +
241 + START (cosh_upward);
242 +
243 + save_round_mode = fegetround ();
244 +
245 + if (!fesetround (FE_UPWARD))
246 + {
247 + TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
248 + TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
249 + TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
250 + }
251 +
252 + fesetround (save_round_mode);
253 +
254 + END (cosh_upward);
255 +}
256 +
257 +
258 +static void
259 cpow_test (void)
260 {
261 errno = 0;
262 @@ -2527,6 +2771,114 @@ exp_test (void)
263
264
265 static void
266 +exp_test_tonearest (void)
267 +{
268 + int save_round_mode;
269 + errno = 0;
270 + FUNC(exp) (0);
271 + if (errno == ENOSYS)
272 + /* Function not implemented. */
273 + return;
274 +
275 + START (exp_tonearest);
276 +
277 + save_round_mode = fegetround ();
278 +
279 + if (!fesetround (FE_TONEAREST))
280 + {
281 + TEST_f_f (exp, 1, M_El);
282 + TEST_f_f (exp, 2, M_E2l);
283 + TEST_f_f (exp, 3, M_E3l);
284 + }
285 +
286 + fesetround (save_round_mode);
287 +
288 + END (exp_tonearest);
289 +}
290 +
291 +
292 +static void
293 +exp_test_towardzero (void)
294 +{
295 + int save_round_mode;
296 + errno = 0;
297 + FUNC(exp) (0);
298 + if (errno == ENOSYS)
299 + /* Function not implemented. */
300 + return;
301 +
302 + START (exp_towardzero);
303 +
304 + save_round_mode = fegetround ();
305 +
306 + if (!fesetround (FE_TOWARDZERO))
307 + {
308 + TEST_f_f (exp, 1, M_El);
309 + TEST_f_f (exp, 2, M_E2l);
310 + TEST_f_f (exp, 3, M_E3l);
311 + }
312 +
313 + fesetround (save_round_mode);
314 +
315 + END (exp_towardzero);
316 +}
317 +
318 +
319 +static void
320 +exp_test_downward (void)
321 +{
322 + int save_round_mode;
323 + errno = 0;
324 + FUNC(exp) (0);
325 + if (errno == ENOSYS)
326 + /* Function not implemented. */
327 + return;
328 +
329 + START (exp_downward);
330 +
331 + save_round_mode = fegetround ();
332 +
333 + if (!fesetround (FE_DOWNWARD))
334 + {
335 + TEST_f_f (exp, 1, M_El);
336 + TEST_f_f (exp, 2, M_E2l);
337 + TEST_f_f (exp, 3, M_E3l);
338 + }
339 +
340 + fesetround (save_round_mode);
341 +
342 + END (exp_downward);
343 +}
344 +
345 +
346 +static void
347 +exp_test_upward (void)
348 +{
349 + int save_round_mode;
350 + errno = 0;
351 + FUNC(exp) (0);
352 + if (errno == ENOSYS)
353 + /* Function not implemented. */
354 + return;
355 +
356 + START (exp_upward);
357 +
358 + save_round_mode = fegetround ();
359 +
360 + if (!fesetround (FE_UPWARD))
361 + {
362 + TEST_f_f (exp, 1, M_El);
363 + TEST_f_f (exp, 2, M_E2l);
364 + TEST_f_f (exp, 3, M_E3l);
365 + }
366 +
367 + fesetround (save_round_mode);
368 +
369 + END (exp_upward);
370 +}
371 +
372 +
373 +static void
374 exp10_test (void)
375 {
376 errno = 0;
377 @@ -4848,22 +5200,127 @@ pow_test (void)
378 END (pow);
379 }
380
381 +
382 static void
383 -remainder_test (void)
384 +pow_test_tonearest (void)
385 {
386 + int save_round_mode;
387 errno = 0;
388 - FUNC(remainder) (1.625, 1.0);
389 + FUNC(pow) (0, 0);
390 if (errno == ENOSYS)
391 /* Function not implemented. */
392 return;
393
394 - START (remainder);
395 + START (pow_tonearest);
396
397 - TEST_ff_f (remainder, 1, 0, nan_value, INVALID_EXCEPTION);
398 - TEST_ff_f (remainder, 1, minus_zero, nan_value, INVALID_EXCEPTION);
399 - TEST_ff_f (remainder, plus_infty, 1, nan_value, INVALID_EXCEPTION);
400 - TEST_ff_f (remainder, minus_infty, 1, nan_value, INVALID_EXCEPTION);
401 - TEST_ff_f (remainder, nan_value, nan_value, nan_value);
402 + save_round_mode = fegetround ();
403 +
404 + if (!fesetround (FE_TONEAREST))
405 + {
406 + TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
407 + TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
408 + }
409 +
410 + fesetround (save_round_mode);
411 +
412 + END (pow_tonearest);
413 +}
414 +
415 +
416 +static void
417 +pow_test_towardzero (void)
418 +{
419 + int save_round_mode;
420 + errno = 0;
421 + FUNC(pow) (0, 0);
422 + if (errno == ENOSYS)
423 + /* Function not implemented. */
424 + return;
425 +
426 + START (pow_towardzero);
427 +
428 + save_round_mode = fegetround ();
429 +
430 + if (!fesetround (FE_TOWARDZERO))
431 + {
432 + TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
433 + TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
434 + }
435 +
436 + fesetround (save_round_mode);
437 +
438 + END (pow_towardzero);
439 +}
440 +
441 +
442 +static void
443 +pow_test_downward (void)
444 +{
445 + int save_round_mode;
446 + errno = 0;
447 + FUNC(pow) (0, 0);
448 + if (errno == ENOSYS)
449 + /* Function not implemented. */
450 + return;
451 +
452 + START (pow_downward);
453 +
454 + save_round_mode = fegetround ();
455 +
456 + if (!fesetround (FE_DOWNWARD))
457 + {
458 + TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
459 + TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
460 + }
461 +
462 + fesetround (save_round_mode);
463 +
464 + END (pow_downward);
465 +}
466 +
467 +
468 +static void
469 +pow_test_upward (void)
470 +{
471 + int save_round_mode;
472 + errno = 0;
473 + FUNC(pow) (0, 0);
474 + if (errno == ENOSYS)
475 + /* Function not implemented. */
476 + return;
477 +
478 + START (pow_upward);
479 +
480 + save_round_mode = fegetround ();
481 +
482 + if (!fesetround (FE_UPWARD))
483 + {
484 + TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
485 + TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
486 + }
487 +
488 + fesetround (save_round_mode);
489 +
490 + END (pow_upward);
491 +}
492 +
493 +
494 +static void
495 +remainder_test (void)
496 +{
497 + errno = 0;
498 + FUNC(remainder) (1.625, 1.0);
499 + if (errno == ENOSYS)
500 + /* Function not implemented. */
501 + return;
502 +
503 + START (remainder);
504 +
505 + TEST_ff_f (remainder, 1, 0, nan_value, INVALID_EXCEPTION);
506 + TEST_ff_f (remainder, 1, minus_zero, nan_value, INVALID_EXCEPTION);
507 + TEST_ff_f (remainder, plus_infty, 1, nan_value, INVALID_EXCEPTION);
508 + TEST_ff_f (remainder, minus_infty, 1, nan_value, INVALID_EXCEPTION);
509 + TEST_ff_f (remainder, nan_value, nan_value, nan_value);
510
511 TEST_ff_f (remainder, 1.625, 1.0, -0.375);
512 TEST_ff_f (remainder, -1.625, 1.0, 0.375);
513 @@ -5545,6 +6002,7 @@ sin_test (void)
514
515 #ifdef TEST_DOUBLE
516 TEST_f_f (sin, 0.80190127184058835, 0.71867942238767868);
517 + TEST_f_f (sin, 2.522464e-1, 2.4957989804940911e-1);
518 #endif
519
520 END (sin);
521 @@ -5553,6 +6011,142 @@ sin_test (void)
522
523
524 static void
525 +sin_test_tonearest (void)
526 +{
527 + int save_round_mode;
528 + errno = 0;
529 + FUNC(sin) (0);
530 + if (errno == ENOSYS)
531 + /* Function not implemented. */
532 + return;
533 +
534 + START (sin_tonearest);
535 +
536 + save_round_mode = fegetround ();
537 +
538 + if (!fesetround (FE_TONEAREST))
539 + {
540 + TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
541 + TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
542 + TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
543 + TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
544 + TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
545 + TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
546 + TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
547 + TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
548 + TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
549 + TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
550 + }
551 +
552 + fesetround (save_round_mode);
553 +
554 + END (sin_tonearest);
555 +}
556 +
557 +
558 +static void
559 +sin_test_towardzero (void)
560 +{
561 + int save_round_mode;
562 + errno = 0;
563 + FUNC(sin) (0);
564 + if (errno == ENOSYS)
565 + /* Function not implemented. */
566 + return;
567 +
568 + START (sin_towardzero);
569 +
570 + save_round_mode = fegetround ();
571 +
572 + if (!fesetround (FE_TOWARDZERO))
573 + {
574 + TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
575 + TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
576 + TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
577 + TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
578 + TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
579 + TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
580 + TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
581 + TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
582 + TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
583 + TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
584 + }
585 +
586 + fesetround (save_round_mode);
587 +
588 + END (sin_towardzero);
589 +}
590 +
591 +
592 +static void
593 +sin_test_downward (void)
594 +{
595 + int save_round_mode;
596 + errno = 0;
597 + FUNC(sin) (0);
598 + if (errno == ENOSYS)
599 + /* Function not implemented. */
600 + return;
601 +
602 + START (sin_downward);
603 +
604 + save_round_mode = fegetround ();
605 +
606 + if (!fesetround (FE_DOWNWARD))
607 + {
608 + TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
609 + TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
610 + TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
611 + TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
612 + TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
613 + TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
614 + TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
615 + TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
616 + TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
617 + TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
618 + }
619 +
620 + fesetround (save_round_mode);
621 +
622 + END (sin_downward);
623 +}
624 +
625 +
626 +static void
627 +sin_test_upward (void)
628 +{
629 + int save_round_mode;
630 + errno = 0;
631 + FUNC(sin) (0);
632 + if (errno == ENOSYS)
633 + /* Function not implemented. */
634 + return;
635 +
636 + START (sin_upward);
637 +
638 + save_round_mode = fegetround ();
639 +
640 + if (!fesetround (FE_UPWARD))
641 + {
642 + TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
643 + TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
644 + TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
645 + TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
646 + TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
647 + TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
648 + TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
649 + TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
650 + TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
651 + TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
652 + }
653 +
654 + fesetround (save_round_mode);
655 +
656 + END (sin_upward);
657 +}
658 +
659 +
660 +static void
661 sincos_test (void)
662 {
663 FLOAT sin_res, cos_res;
664 @@ -5610,6 +6204,115 @@ sinh_test (void)
665 END (sinh);
666 }
667
668 +
669 +static void
670 +sinh_test_tonearest (void)
671 +{
672 + int save_round_mode;
673 + errno = 0;
674 + FUNC(sinh) (0);
675 + if (errno == ENOSYS)
676 + /* Function not implemented. */
677 + return;
678 +
679 + START (sinh_tonearest);
680 +
681 + save_round_mode = fegetround ();
682 +
683 + if (!fesetround (FE_TONEAREST))
684 + {
685 + TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
686 + TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
687 + TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
688 + }
689 +
690 + fesetround (save_round_mode);
691 +
692 + END (sinh_tonearest);
693 +}
694 +
695 +
696 +static void
697 +sinh_test_towardzero (void)
698 +{
699 + int save_round_mode;
700 + errno = 0;
701 + FUNC(sinh) (0);
702 + if (errno == ENOSYS)
703 + /* Function not implemented. */
704 + return;
705 +
706 + START (sinh_towardzero);
707 +
708 + save_round_mode = fegetround ();
709 +
710 + if (!fesetround (FE_TOWARDZERO))
711 + {
712 + TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
713 + TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
714 + TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
715 + }
716 +
717 + fesetround (save_round_mode);
718 +
719 + END (sinh_towardzero);
720 +}
721 +
722 +
723 +static void
724 +sinh_test_downward (void)
725 +{
726 + int save_round_mode;
727 + errno = 0;
728 + FUNC(sinh) (0);
729 + if (errno == ENOSYS)
730 + /* Function not implemented. */
731 + return;
732 +
733 + START (sinh_downward);
734 +
735 + save_round_mode = fegetround ();
736 +
737 + if (!fesetround (FE_DOWNWARD))
738 + {
739 + TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
740 + TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
741 + TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
742 + }
743 +
744 + fesetround (save_round_mode);
745 +
746 + END (sinh_downward);
747 +}
748 +
749 +
750 +static void
751 +sinh_test_upward (void)
752 +{
753 + int save_round_mode;
754 + errno = 0;
755 + FUNC(sinh) (0);
756 + if (errno == ENOSYS)
757 + /* Function not implemented. */
758 + return;
759 +
760 + START (sinh_upward);
761 +
762 + save_round_mode = fegetround ();
763 +
764 + if (!fesetround (FE_UPWARD))
765 + {
766 + TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
767 + TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
768 + TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
769 + }
770 +
771 + fesetround (save_round_mode);
772 +
773 + END (sinh_upward);
774 +}
775 +
776 +
777 static void
778 sqrt_test (void)
779 {
780 @@ -5673,6 +6376,143 @@ tan_test (void)
781 END (tan);
782 }
783
784 +
785 +static void
786 +tan_test_tonearest (void)
787 +{
788 + int save_round_mode;
789 + errno = 0;
790 + FUNC(tan) (0);
791 + if (errno == ENOSYS)
792 + /* Function not implemented. */
793 + return;
794 +
795 + START (tan_tonearest);
796 +
797 + save_round_mode = fegetround ();
798 +
799 + if (!fesetround (FE_TONEAREST))
800 + {
801 + TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
802 + TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
803 + TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
804 + TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
805 + TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
806 + TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
807 + TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
808 + TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
809 + TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
810 + TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
811 + }
812 +
813 + fesetround (save_round_mode);
814 +
815 + END (tan_tonearest);
816 +}
817 +
818 +
819 +static void
820 +tan_test_towardzero (void)
821 +{
822 + int save_round_mode;
823 + errno = 0;
824 + FUNC(tan) (0);
825 + if (errno == ENOSYS)
826 + /* Function not implemented. */
827 + return;
828 +
829 + START (tan_towardzero);
830 +
831 + save_round_mode = fegetround ();
832 +
833 + if (!fesetround (FE_TOWARDZERO))
834 + {
835 + TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
836 + TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
837 + TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
838 + TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
839 + TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
840 + TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
841 + TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
842 + TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
843 + TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
844 + TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
845 + }
846 +
847 + fesetround (save_round_mode);
848 +
849 + END (tan_towardzero);
850 +}
851 +
852 +
853 +static void
854 +tan_test_downward (void)
855 +{
856 + int save_round_mode;
857 + errno = 0;
858 + FUNC(tan) (0);
859 + if (errno == ENOSYS)
860 + /* Function not implemented. */
861 + return;
862 +
863 + START (tan_downward);
864 +
865 + save_round_mode = fegetround ();
866 +
867 + if (!fesetround (FE_DOWNWARD))
868 + {
869 + TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
870 + TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
871 + TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
872 + TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
873 + TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
874 + TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
875 + TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
876 + TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
877 + TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
878 + TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
879 + }
880 +
881 + fesetround (save_round_mode);
882 +
883 + END (tan_downward);
884 +}
885 +
886 +
887 +static void
888 +tan_test_upward (void)
889 +{
890 + int save_round_mode;
891 + errno = 0;
892 + FUNC(tan) (0);
893 + if (errno == ENOSYS)
894 + /* Function not implemented. */
895 + return;
896 +
897 + START (tan_upward);
898 +
899 + save_round_mode = fegetround ();
900 +
901 + if (!fesetround (FE_UPWARD))
902 + {
903 + TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
904 + TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
905 + TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
906 + TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
907 + TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
908 + TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
909 + TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
910 + TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
911 + TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
912 + TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
913 + }
914 +
915 + fesetround (save_round_mode);
916 +
917 + END (tan_upward);
918 +}
919 +
920 +
921 static void
922 tanh_test (void)
923 {
924 @@ -6171,20 +7011,44 @@ main (int argc, char **argv)
925 atan_test ();
926 atan2_test ();
927 cos_test ();
928 + cos_test_tonearest ();
929 + cos_test_towardzero ();
930 + cos_test_downward ();
931 + cos_test_upward ();
932 sin_test ();
933 + sin_test_tonearest ();
934 + sin_test_towardzero ();
935 + sin_test_downward ();
936 + sin_test_upward ();
937 sincos_test ();
938 tan_test ();
939 + tan_test_tonearest ();
940 + tan_test_towardzero ();
941 + tan_test_downward ();
942 + tan_test_upward ();
943
944 /* Hyperbolic functions: */
945 acosh_test ();
946 asinh_test ();
947 atanh_test ();
948 cosh_test ();
949 + cosh_test_tonearest ();
950 + cosh_test_towardzero ();
951 + cosh_test_downward ();
952 + cosh_test_upward ();
953 sinh_test ();
954 + sinh_test_tonearest ();
955 + sinh_test_towardzero ();
956 + sinh_test_downward ();
957 + sinh_test_upward ();
958 tanh_test ();
959
960 /* Exponential and logarithmic functions: */
961 exp_test ();
962 + exp_test_tonearest ();
963 + exp_test_towardzero ();
964 + exp_test_downward ();
965 + exp_test_upward ();
966 exp10_test ();
967 exp2_test ();
968 expm1_test ();
969 @@ -6207,6 +7071,10 @@ main (int argc, char **argv)
970 fabs_test ();
971 hypot_test ();
972 pow_test ();
973 + pow_test_tonearest ();
974 + pow_test_towardzero ();
975 + pow_test_downward ();
976 + pow_test_upward ();
977 sqrt_test ();
978
979 /* Error and gamma functions: */
980 diff -Nrup a/math/math_private.h b/math/math_private.h
981 --- a/math/math_private.h 2010-05-04 05:27:23.000000000 -0600
982 +++ b/math/math_private.h 2012-08-06 09:54:00.821929695 -0600
983 @@ -357,4 +357,41 @@ extern void __docos (double __x, double
984 #define math_force_eval(x) __asm __volatile ("" : : "m" (x))
985 #endif
986
987 +
988 +/* The standards only specify one variant of the fenv.h interfaces.
989 + But at least for some architectures we can be more efficient if we
990 + know what operations are going to be performed. Therefore we
991 + define additional interfaces. By default they refer to the normal
992 + interfaces. */
993 +#define libc_fegetround() fegetround ()
994 +#define libc_fegetroundf() fegetround ()
995 +#define libc_fegetroundl() fegetround ()
996 +
997 +#define libc_fesetround(r) (void) fesetround (r)
998 +#define libc_fesetroundf(r) (void) fesetround (r)
999 +#define libc_fesetroundl(r) (void) fesetround (r)
1000 +
1001 +#define libc_feholdexcept(e) (void) feholdexcept (e)
1002 +#define libc_feholdexceptf(e) (void) feholdexcept (e)
1003 +#define libc_feholdexceptl(e) (void) feholdexcept (e)
1004 +
1005 +#define libc_feholdexcept_setround(e, r) \
1006 + do { feholdexcept (e); fesetround (r); } while (0)
1007 +#define libc_feholdexcept_setroundf(e, r) \
1008 + do { feholdexcept (e); fesetround (r); } while (0)
1009 +#define libc_feholdexcept_setroundl(e, r) \
1010 + do { feholdexcept (e); fesetround (r); } while (0)
1011 +
1012 +#define libc_fetestexcept(e) fetestexcept (e)
1013 +#define libc_fetestexceptf(e) fetestexcept (e)
1014 +#define libc_fetestexceptl(e) fetestexcept (e)
1015 +
1016 +#define libc_fesetenv(e) (void) fesetenv (e)
1017 +#define libc_fesetenvf(e) (void) fesetenv (e)
1018 +#define libc_fesetenvl(e) (void) fesetenv (e)
1019 +
1020 +#define libc_feupdateenv(e) (void) feupdateenv (e)
1021 +#define libc_feupdateenvf(e) (void) feupdateenv (e)
1022 +#define libc_feupdateenvl(e) (void) feupdateenv (e)
1023 +
1024 #endif /* _MATH_PRIVATE_H_ */
1025 diff -Nrup a/sysdeps/i386/fpu/libm-test-ulps b/sysdeps/i386/fpu/libm-test-ulps
1026 --- a/sysdeps/i386/fpu/libm-test-ulps 2010-05-04 05:27:23.000000000 -0600
1027 +++ b/sysdeps/i386/fpu/libm-test-ulps 2012-08-06 11:29:16.370874961 -0600
1028 @@ -9,18 +9,12 @@ ldouble: 1
1029 Test "asin (-0.5) == -pi/6":
1030 ildouble: 1
1031 ldouble: 1
1032 -Test "asin (-1.0) == -pi/2":
1033 -ildouble: 1
1034 -ldouble: 1
1035 Test "asin (0.5) == pi/6":
1036 ildouble: 1
1037 ldouble: 1
1038 Test "asin (0.75) == 0.848062078981481008052944338998418080":
1039 ildouble: 1
1040 ldouble: 1
1041 -Test "asin (1.0) == pi/2":
1042 -ildouble: 1
1043 -ldouble: 1
1044
1045 # atanh
1046 Test "atanh (0.75) == 0.972955074527656652552676371721589865":
1047 @@ -35,20 +29,6 @@ ildouble: 2
1048 ldouble: 2
1049
1050 # cacosh
1051 -Test "Real part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
1052 -double: 1
1053 -float: 9
1054 -idouble: 1
1055 -ifloat: 9
1056 -ildouble: 6
1057 -ldouble: 6
1058 -Test "Imaginary part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
1059 -double: 1
1060 -float: 4
1061 -idouble: 1
1062 -ifloat: 4
1063 -ildouble: 1
1064 -ldouble: 1
1065 Test "Real part of: cacosh (0.75 + 1.25 i) == 1.13239363160530819522266333696834467 + 1.11752014915610270578240049553777969 i":
1066 ildouble: 1
1067 ldouble: 1
1068 @@ -124,8 +104,6 @@ ldouble: 1
1069 Test "Imaginary part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i":
1070 float: 1
1071 ifloat: 1
1072 -ildouble: 1
1073 -ldouble: 1
1074 Test "Real part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i":
1075 double: 1
1076 idouble: 1
1077 @@ -149,9 +127,7 @@ float: 1
1078 idouble: 1
1079 ifloat: 1
1080 Test "Imaginary part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i":
1081 -double: 1
1082 float: 1
1083 -idouble: 1
1084 ifloat: 1
1085
1086 # cexp
1087 @@ -186,8 +162,6 @@ ifloat: 1
1088 Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
1089 double: 1
1090 idouble: 1
1091 -ildouble: 1
1092 -ldouble: 1
1093 Test "Imaginary part of: clog10 (-3 + inf i) == inf + pi/2*log10(e) i":
1094 double: 1
1095 float: 1
1096 @@ -262,27 +236,175 @@ ifloat: 1
1097 # cos
1098 Test "cos (M_PI_6l * 2.0) == 0.5":
1099 double: 1
1100 -float: 1
1101 idouble: 1
1102 -ifloat: 1
1103 Test "cos (M_PI_6l * 4.0) == -0.5":
1104 double: 2
1105 float: 1
1106 idouble: 2
1107 ifloat: 1
1108 +
1109 +# cos_downward
1110 +Test "cos_downward (1) == 0.5403023058681397174009366074429766037323":
1111 +double: 1
1112 +idouble: 1
1113 +ildouble: 1
1114 +ldouble: 1
1115 +Test "cos_downward (10) == -0.8390715290764524522588639478240648345199":
1116 +double: 1
1117 +float: 1
1118 +idouble: 1
1119 +ifloat: 1
1120 +Test "cos_downward (3) == -0.9899924966004454572715727947312613023937":
1121 +double: 1
1122 +idouble: 1
1123 +Test "cos_downward (4) == -0.6536436208636119146391681830977503814241":
1124 +float: 1
1125 +ifloat: 1
1126 +ildouble: 1
1127 +ldouble: 1
1128 +Test "cos_downward (5) == 0.2836621854632262644666391715135573083344":
1129 +float: 1
1130 +ifloat: 1
1131 +Test "cos_downward (7) == 0.7539022543433046381411975217191820122183":
1132 +float: 1
1133 +ifloat: 1
1134 +ildouble: 1
1135 +ldouble: 1
1136 +Test "cos_downward (8) == -0.1455000338086135258688413818311946826093":
1137 +ildouble: 1
1138 +ldouble: 1
1139 +Test "cos_downward (9) == -0.9111302618846769883682947111811653112463":
1140 +double: 1
1141 +float: 1
1142 +idouble: 1
1143 +ifloat: 1
1144 +ildouble: 1
1145 +ldouble: 1
1146 +
1147 +# cos_tonearest
1148 +Test "cos_tonearest (8) == -0.1455000338086135258688413818311946826093":
1149 +ildouble: 1
1150 +ldouble: 1
1151 +Test "cos_tonearest (9) == -0.9111302618846769883682947111811653112463":
1152 +ildouble: 1
1153 +ldouble: 1
1154 +
1155 +# cos_towardzero
1156 +Test "cos_towardzero (1) == 0.5403023058681397174009366074429766037323":
1157 +double: 1
1158 +idouble: 1
1159 +ildouble: 1
1160 +ldouble: 1
1161 +Test "cos_towardzero (10) == -0.8390715290764524522588639478240648345199":
1162 ildouble: 1
1163 ldouble: 1
1164 -Test "cos (pi/2) == 0":
1165 +Test "cos_towardzero (2) == -0.4161468365471423869975682295007621897660":
1166 double: 1
1167 float: 1
1168 idouble: 1
1169 ifloat: 1
1170 ildouble: 1
1171 ldouble: 1
1172 +Test "cos_towardzero (3) == -0.9899924966004454572715727947312613023937":
1173 +float: 1
1174 +ifloat: 1
1175 +ildouble: 1
1176 +ldouble: 1
1177 +Test "cos_towardzero (4) == -0.6536436208636119146391681830977503814241":
1178 +double: 1
1179 +idouble: 1
1180 +Test "cos_towardzero (5) == 0.2836621854632262644666391715135573083344":
1181 +float: 1
1182 +ifloat: 1
1183 +Test "cos_towardzero (7) == 0.7539022543433046381411975217191820122183":
1184 +float: 1
1185 +ifloat: 1
1186 +ildouble: 1
1187 +ldouble: 1
1188 +Test "cos_towardzero (8) == -0.1455000338086135258688413818311946826093":
1189 +double: 1
1190 +float: 1
1191 +idouble: 1
1192 +ifloat: 1
1193
1194 -# cosh
1195 -Test "cosh (0.75) == 1.29468328467684468784170818539018176":
1196 +# cos_upward
1197 +Test "cos_upward (1) == 0.5403023058681397174009366074429766037323":
1198 +float: 1
1199 +ifloat: 1
1200 +Test "cos_upward (10) == -0.8390715290764524522588639478240648345199":
1201 +ildouble: 1
1202 +ldouble: 1
1203 +Test "cos_upward (2) == -0.4161468365471423869975682295007621897660":
1204 +double: 1
1205 +float: 1
1206 +idouble: 1
1207 +ifloat: 1
1208 +ildouble: 1
1209 +ldouble: 1
1210 +Test "cos_upward (3) == -0.9899924966004454572715727947312613023937":
1211 +float: 1
1212 +ifloat: 1
1213 +ildouble: 1
1214 +ldouble: 1
1215 +Test "cos_upward (4) == -0.6536436208636119146391681830977503814241":
1216 +double: 1
1217 +idouble: 1
1218 +Test "cos_upward (5) == 0.2836621854632262644666391715135573083344":
1219 +double: 1
1220 +idouble: 1
1221 +ildouble: 1
1222 +ldouble: 1
1223 +Test "cos_upward (6) == 0.9601702866503660205456522979229244054519":
1224 +double: 1
1225 +float: 1
1226 +idouble: 1
1227 +ifloat: 1
1228 ildouble: 1
1229 +ldouble: 1
1230 +Test "cos_upward (7) == 0.7539022543433046381411975217191820122183":
1231 +double: 1
1232 +idouble: 1
1233 +Test "cos_upward (8) == -0.1455000338086135258688413818311946826093":
1234 +double: 1
1235 +float: 1
1236 +idouble: 1
1237 +ifloat: 1
1238 +
1239 +# cosh_downward
1240 +Test "cosh_downward (22) == 1792456423.065795780980053377632656584997":
1241 +double: 1
1242 +float: 1
1243 +ldouble: 2
1244 +Test "cosh_downward (23) == 4872401723.124451300068625740569997090344":
1245 +double: 1
1246 +float: 1
1247 +ldouble: 1
1248 +Test "cosh_downward (24) == 13244561064.92173614708845674912733665919":
1249 +float: 1
1250 +ldouble: 1
1251 +
1252 +# cosh_tonearest
1253 +Test "cosh_tonearest (22) == 1792456423.065795780980053377632656584997":
1254 +ldouble: 1
1255 +
1256 +# cosh_towardzero
1257 +Test "cosh_towardzero (22) == 1792456423.065795780980053377632656584997":
1258 +double: 1
1259 +float: 1
1260 +ldouble: 2
1261 +Test "cosh_towardzero (23) == 4872401723.124451300068625740569997090344":
1262 +double: 1
1263 +float: 1
1264 +ldouble: 1
1265 +Test "cosh_towardzero (24) == 13244561064.92173614708845674912733665919":
1266 +float: 1
1267 +ldouble: 1
1268 +
1269 +# cosh_upward
1270 +Test "cosh_upward (23) == 4872401723.124451300068625740569997090344":
1271 +ldouble: 1
1272 +Test "cosh_upward (24) == 13244561064.92173614708845674912733665919":
1273 +double: 1
1274
1275 # cpow
1276 Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
1277 @@ -353,12 +475,8 @@ double: 1
1278 float: 1
1279 idouble: 1
1280 ifloat: 1
1281 -ildouble: 2
1282 -ldouble: 2
1283 Test "Real part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i":
1284 -double: 1
1285 float: 1
1286 -idouble: 1
1287 ifloat: 1
1288 ildouble: 1
1289 ldouble: 1
1290 @@ -370,40 +488,36 @@ ifloat: 1
1291 Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
1292 double: 1
1293 idouble: 1
1294 -ildouble: 439
1295 -ldouble: 439
1296 +ildouble: 1
1297 +ldouble: 1
1298 Test "Imaginary part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
1299 float: 1
1300 ifloat: 1
1301 -ildouble: 2
1302 -ldouble: 2
1303 +ildouble: 1
1304 +ldouble: 1
1305 Test "Real part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i":
1306 ildouble: 1
1307 ldouble: 1
1308 Test "Imaginary part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i":
1309 -double: 1
1310 float: 1
1311 -idouble: 1
1312 ifloat: 1
1313 ildouble: 3
1314 ldouble: 3
1315
1316 # ctanh
1317 Test "Real part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
1318 -ildouble: 5
1319 -ldouble: 5
1320 +ildouble: 3
1321 +ldouble: 3
1322 Test "Imaginary part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
1323 float: 1
1324 ifloat: 1
1325 -ildouble: 25
1326 -ldouble: 25
1327 +ildouble: 1
1328 +ldouble: 1
1329 Test "Imaginary part of: ctanh (0 + pi/4 i) == 0.0 + 1.0 i":
1330 float: 1
1331 ifloat: 1
1332 Test "Real part of: ctanh (0.75 + 1.25 i) == 1.37260757053378320258048606571226857 + 0.385795952609750664177596760720790220 i":
1333 -double: 1
1334 float: 1
1335 -idouble: 1
1336 ifloat: 1
1337 Test "Imaginary part of: ctanh (0.75 + 1.25 i) == 1.37260757053378320258048606571226857 + 0.385795952609750664177596760720790220 i":
1338 double: 1
1339 @@ -419,9 +533,6 @@ double: 1
1340 idouble: 1
1341
1342 # erfc
1343 -Test "erfc (0.75) == 0.288844366346484868401062165408589223":
1344 -float: 1
1345 -ifloat: 1
1346 Test "erfc (1.25) == 0.0770998717435417698634765188027188596":
1347 ildouble: 1
1348 ldouble: 1
1349 @@ -434,14 +545,6 @@ idouble: 1
1350 ildouble: 1
1351 ldouble: 1
1352
1353 -# exp
1354 -Test "exp (0.75) == 2.11700001661267466854536981983709561":
1355 -ildouble: 1
1356 -Test "exp (1000.0) == 0.197007111401704699388887935224332313e435":
1357 -ildouble: 754
1358 -Test "exp (50.0) == 5184705528587072464087.45332293348538":
1359 -ildouble: 16
1360 -
1361 # exp10
1362 Test "exp10 (-1) == 0.1":
1363 ildouble: 1
1364 @@ -453,6 +556,51 @@ Test "exp10 (3) == 1000":
1365 ildouble: 8
1366 ldouble: 8
1367
1368 +# exp_downward
1369 +Test "exp_downward (1) == e":
1370 +ildouble: 1
1371 +ldouble: 1
1372 +Test "exp_downward (2) == e^2":
1373 +double: 1
1374 +float: 1
1375 +idouble: 1
1376 +ifloat: 1
1377 +ildouble: 2
1378 +ldouble: 2
1379 +Test "exp_downward (3) == e^3":
1380 +double: 1
1381 +float: 1
1382 +idouble: 1
1383 +ifloat: 1
1384 +ildouble: 1
1385 +ldouble: 1
1386 +
1387 +# exp_towardzero
1388 +Test "exp_towardzero (1) == e":
1389 +ildouble: 1
1390 +ldouble: 1
1391 +Test "exp_towardzero (2) == e^2":
1392 +double: 1
1393 +float: 1
1394 +idouble: 1
1395 +ifloat: 1
1396 +ildouble: 2
1397 +ldouble: 2
1398 +Test "exp_towardzero (3) == e^3":
1399 +double: 1
1400 +float: 1
1401 +idouble: 1
1402 +ifloat: 1
1403 +ildouble: 1
1404 +ldouble: 1
1405 +
1406 +# exp_upward
1407 +Test "exp_upward (1) == e":
1408 +double: 1
1409 +float: 1
1410 +idouble: 1
1411 +ifloat: 1
1412 +
1413 # expm1
1414 Test "expm1 (1) == M_El - 1.0":
1415 ildouble: 1
1416 @@ -485,26 +633,24 @@ float: 1
1417 # j0
1418 Test "j0 (-4.0) == -3.9714980986384737228659076845169804197562E-1":
1419 double: 1
1420 -float: 2
1421 +float: 1
1422 idouble: 1
1423 -ifloat: 2
1424 +ifloat: 1
1425 ildouble: 1
1426 ldouble: 1
1427 Test "j0 (10.0) == -0.245935764451348335197760862485328754":
1428 -double: 3
1429 +double: 1
1430 float: 1
1431 -idouble: 3
1432 +idouble: 1
1433 ifloat: 1
1434 Test "j0 (2.0) == 0.223890779141235668051827454649948626":
1435 -double: 1
1436 float: 1
1437 -idouble: 1
1438 ifloat: 1
1439 Test "j0 (4.0) == -3.9714980986384737228659076845169804197562E-1":
1440 double: 1
1441 -float: 2
1442 +float: 1
1443 idouble: 1
1444 -ifloat: 2
1445 +ifloat: 1
1446 ildouble: 1
1447 ldouble: 1
1448 Test "j0 (8.0) == 0.171650807137553906090869407851972001":
1449 @@ -512,13 +658,8 @@ float: 1
1450 ifloat: 1
1451
1452 # j1
1453 -Test "j1 (0.75) == 0.349243602174862192523281016426251335":
1454 -double: 1
1455 -idouble: 1
1456 Test "j1 (10.0) == 0.0434727461688614366697487680258592883":
1457 -double: 1
1458 float: 1
1459 -idouble: 1
1460 ifloat: 1
1461 ildouble: 1
1462 ldouble: 1
1463 @@ -526,9 +667,7 @@ Test "j1 (2.0) == 0.57672480775687338720
1464 double: 1
1465 idouble: 1
1466 Test "j1 (8.0) == 0.234636346853914624381276651590454612":
1467 -double: 1
1468 float: 1
1469 -idouble: 1
1470 ifloat: 1
1471 ildouble: 1
1472 ldouble: 1
1473 @@ -536,38 +675,31 @@ ldouble: 1
1474 # jn
1475 Test "jn (0, -4.0) == -3.9714980986384737228659076845169804197562E-1":
1476 double: 1
1477 -float: 2
1478 +float: 1
1479 idouble: 1
1480 -ifloat: 2
1481 +ifloat: 1
1482 ildouble: 1
1483 ldouble: 1
1484 Test "jn (0, 10.0) == -0.245935764451348335197760862485328754":
1485 -double: 3
1486 +double: 1
1487 float: 1
1488 -idouble: 3
1489 +idouble: 1
1490 ifloat: 1
1491 Test "jn (0, 2.0) == 0.223890779141235668051827454649948626":
1492 -double: 1
1493 float: 1
1494 -idouble: 1
1495 ifloat: 1
1496 Test "jn (0, 4.0) == -3.9714980986384737228659076845169804197562E-1":
1497 double: 1
1498 -float: 2
1499 +float: 1
1500 idouble: 1
1501 -ifloat: 2
1502 +ifloat: 1
1503 ildouble: 1
1504 ldouble: 1
1505 Test "jn (0, 8.0) == 0.171650807137553906090869407851972001":
1506 float: 1
1507 ifloat: 1
1508 -Test "jn (1, 0.75) == 0.349243602174862192523281016426251335":
1509 -double: 1
1510 -idouble: 1
1511 Test "jn (1, 10.0) == 0.0434727461688614366697487680258592883":
1512 -double: 1
1513 float: 1
1514 -idouble: 1
1515 ifloat: 1
1516 ildouble: 1
1517 ldouble: 1
1518 @@ -575,9 +707,7 @@ Test "jn (1, 2.0) == 0.57672480775687338
1519 double: 1
1520 idouble: 1
1521 Test "jn (1, 8.0) == 0.234636346853914624381276651590454612":
1522 -double: 1
1523 float: 1
1524 -idouble: 1
1525 ifloat: 1
1526 ildouble: 1
1527 ldouble: 1
1528 @@ -589,9 +719,7 @@ ifloat: 1
1529 ildouble: 1
1530 ldouble: 1
1531 Test "jn (10, 0.125) == 0.250543369809369890173993791865771547e-18":
1532 -double: 1
1533 float: 1
1534 -idouble: 1
1535 ifloat: 1
1536 Test "jn (10, 0.75) == 0.149621713117596814698712483621682835e-10":
1537 float: 1
1538 @@ -606,38 +734,32 @@ ifloat: 1
1539 ildouble: 1
1540 ldouble: 1
1541 Test "jn (10, 10.0) == 0.207486106633358857697278723518753428":
1542 -double: 5
1543 -float: 2
1544 -idouble: 5
1545 -ifloat: 2
1546 +double: 1
1547 +float: 1
1548 +idouble: 1
1549 +ifloat: 1
1550 ildouble: 2
1551 ldouble: 2
1552 Test "jn (10, 2.0) == 0.251538628271673670963516093751820639e-6":
1553 -double: 2
1554 -idouble: 2
1555 ildouble: 1
1556 ldouble: 1
1557 Test "jn (3, -1.0) == -0.0195633539826684059189053216217515083":
1558 ildouble: 1
1559 ldouble: 1
1560 Test "jn (3, 0.75) == 0.848438342327410884392755236884386804e-2":
1561 -double: 1
1562 float: 1
1563 -idouble: 1
1564 ifloat: 1
1565 Test "jn (3, 1.0) == 0.0195633539826684059189053216217515083":
1566 ildouble: 1
1567 ldouble: 1
1568 Test "jn (3, 10.0) == 0.0583793793051868123429354784103409563":
1569 -double: 5
1570 -float: 2
1571 -idouble: 5
1572 -ifloat: 2
1573 +double: 1
1574 +float: 1
1575 +idouble: 1
1576 +ifloat: 1
1577 ildouble: 1
1578 ldouble: 1
1579 Test "jn (3, 2.0) == 0.128943249474402051098793332969239835":
1580 -double: 1
1581 -idouble: 1
1582 ildouble: 1
1583 ldouble: 1
1584
1585 @@ -648,9 +770,7 @@ idouble: 1
1586 ildouble: 1
1587 ldouble: 1
1588 Test "lgamma (0.7) == 0.260867246531666514385732417016759578":
1589 -double: 1
1590 float: 1
1591 -idouble: 1
1592 ifloat: 1
1593 Test "lgamma (1.2) == -0.853740900033158497197028392998854470e-1":
1594 double: 1
1595 @@ -660,11 +780,6 @@ ifloat: 2
1596 ildouble: 1
1597 ldouble: 1
1598
1599 -# log
1600 -Test "log (e) == 1":
1601 -float: 1
1602 -ifloat: 1
1603 -
1604 # log10
1605 Test "log10 (0.75) == -0.124938736608299953132449886193870744":
1606 ildouble: 1
1607 @@ -675,20 +790,179 @@ ifloat: 1
1608 ildouble: 1
1609 ldouble: 1
1610
1611 -# sincos
1612 -Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
1613 +# pow_downward
1614 +Test "pow_downward (1.0625, 1.125) == 1.070582293028761362162622578677070098674":
1615 double: 1
1616 +idouble: 1
1617 +ildouble: 1
1618 +ldouble: 1
1619 +Test "pow_downward (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
1620 float: 1
1621 +ifloat: 1
1622 +ildouble: 1
1623 +ldouble: 1
1624 +
1625 +# pow_towardzero
1626 +Test "pow_towardzero (1.0625, 1.125) == 1.070582293028761362162622578677070098674":
1627 +double: 1
1628 idouble: 1
1629 +ildouble: 1
1630 +ldouble: 1
1631 +Test "pow_towardzero (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
1632 +float: 1
1633 ifloat: 1
1634 -Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res":
1635 +ildouble: 1
1636 +ldouble: 1
1637 +
1638 +# pow_upward
1639 +Test "pow_upward (1.0625, 1.125) == 1.070582293028761362162622578677070098674":
1640 +float: 1
1641 +ifloat: 1
1642 +ildouble: 1
1643 +ldouble: 1
1644 +Test "pow_upward (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
1645 +double: 1
1646 +idouble: 1
1647 +ildouble: 1
1648 +ldouble: 1
1649 +
1650 +# sin_downward
1651 +Test "sin_downward (1) == 0.8414709848078965066525023216302989996226":
1652 +ildouble: 1
1653 +ldouble: 1
1654 +Test "sin_downward (10) == -0.5440211108893698134047476618513772816836":
1655 +double: 1
1656 +idouble: 1
1657 +ildouble: 1
1658 +ldouble: 1
1659 +Test "sin_downward (2) == 0.9092974268256816953960198659117448427023":
1660 +double: 1
1661 +idouble: 1
1662 +Test "sin_downward (3) == 0.1411200080598672221007448028081102798469":
1663 +ildouble: 1
1664 +ldouble: 1
1665 +Test "sin_downward (4) == -0.7568024953079282513726390945118290941359":
1666 +double: 1
1667 +idouble: 1
1668 +ildouble: 1
1669 +ldouble: 1
1670 +Test "sin_downward (5) == -0.9589242746631384688931544061559939733525":
1671 +double: 1
1672 +idouble: 1
1673 +ildouble: 1
1674 +ldouble: 1
1675 +Test "sin_downward (6) == -0.2794154981989258728115554466118947596280":
1676 double: 1
1677 float: 1
1678 idouble: 1
1679 ifloat: 1
1680 +Test "sin_downward (7) == 0.6569865987187890903969990915936351779369":
1681 ildouble: 1
1682 ldouble: 1
1683 -Test "sincos (pi/2, &sin_res, &cos_res) puts 0 in cos_res":
1684 +Test "sin_downward (8) == 0.9893582466233817778081235982452886721164":
1685 +double: 1
1686 +idouble: 1
1687 +ildouble: 1
1688 +ldouble: 1
1689 +Test "sin_downward (9) == 0.4121184852417565697562725663524351793439":
1690 +double: 1
1691 +float: 1
1692 +idouble: 1
1693 +ifloat: 1
1694 +ildouble: 1
1695 +ldouble: 1
1696 +
1697 +# sin_tonearest
1698 +Test "sin_tonearest (10) == -0.5440211108893698134047476618513772816836":
1699 +ildouble: 1
1700 +ldouble: 1
1701 +Test "sin_tonearest (4) == -0.7568024953079282513726390945118290941359":
1702 +ildouble: 1
1703 +ldouble: 1
1704 +Test "sin_tonearest (9) == 0.4121184852417565697562725663524351793439":
1705 +ildouble: 1
1706 +ldouble: 1
1707 +
1708 +# sin_towardzero
1709 +Test "sin_towardzero (1) == 0.8414709848078965066525023216302989996226":
1710 +ildouble: 1
1711 +ldouble: 1
1712 +Test "sin_towardzero (10) == -0.5440211108893698134047476618513772816836":
1713 +float: 1
1714 +ifloat: 1
1715 +Test "sin_towardzero (2) == 0.9092974268256816953960198659117448427023":
1716 +double: 1
1717 +idouble: 1
1718 +Test "sin_towardzero (3) == 0.1411200080598672221007448028081102798469":
1719 +ildouble: 1
1720 +ldouble: 1
1721 +Test "sin_towardzero (4) == -0.7568024953079282513726390945118290941359":
1722 +float: 1
1723 +ifloat: 1
1724 +Test "sin_towardzero (5) == -0.9589242746631384688931544061559939733525":
1725 +float: 1
1726 +ifloat: 1
1727 +Test "sin_towardzero (6) == -0.2794154981989258728115554466118947596280":
1728 +ildouble: 1
1729 +ldouble: 1
1730 +Test "sin_towardzero (7) == 0.6569865987187890903969990915936351779369":
1731 +ildouble: 1
1732 +ldouble: 1
1733 +Test "sin_towardzero (8) == 0.9893582466233817778081235982452886721164":
1734 +double: 1
1735 +idouble: 1
1736 +ildouble: 1
1737 +ldouble: 1
1738 +Test "sin_towardzero (9) == 0.4121184852417565697562725663524351793439":
1739 +double: 1
1740 +float: 1
1741 +idouble: 1
1742 +ifloat: 1
1743 +ildouble: 1
1744 +ldouble: 1
1745 +
1746 +# sin_upward
1747 +Test "sin_upward (1) == 0.8414709848078965066525023216302989996226":
1748 +double: 1
1749 +float: 1
1750 +idouble: 1
1751 +ifloat: 1
1752 +Test "sin_upward (10) == -0.5440211108893698134047476618513772816836":
1753 +float: 1
1754 +ifloat: 1
1755 +Test "sin_upward (2) == 0.9092974268256816953960198659117448427023":
1756 +float: 1
1757 +ifloat: 1
1758 +ildouble: 1
1759 +ldouble: 1
1760 +Test "sin_upward (3) == 0.1411200080598672221007448028081102798469":
1761 +double: 1
1762 +float: 1
1763 +idouble: 1
1764 +ifloat: 1
1765 +Test "sin_upward (4) == -0.7568024953079282513726390945118290941359":
1766 +float: 1
1767 +ifloat: 1
1768 +Test "sin_upward (5) == -0.9589242746631384688931544061559939733525":
1769 +float: 1
1770 +ifloat: 1
1771 +Test "sin_upward (6) == -0.2794154981989258728115554466118947596280":
1772 +ildouble: 1
1773 +ldouble: 1
1774 +Test "sin_upward (7) == 0.6569865987187890903969990915936351779369":
1775 +double: 1
1776 +float: 1
1777 +idouble: 1
1778 +ifloat: 1
1779 +Test "sin_upward (8) == 0.9893582466233817778081235982452886721164":
1780 +float: 1
1781 +ifloat: 1
1782 +
1783 +# sincos
1784 +Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
1785 +double: 1
1786 +idouble: 1
1787 +Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res":
1788 double: 1
1789 float: 1
1790 idouble: 1
1791 @@ -698,66 +972,237 @@ ldouble: 1
1792
1793 # sinh
1794 Test "sinh (0.75) == 0.822316731935829980703661634446913849":
1795 -double: 1
1796 ildouble: 1
1797
1798 -# tan
1799 -Test "tan (pi/4) == 1":
1800 +# sinh_downward
1801 +Test "sinh_downward (22) == 1792456423.065795780701106568345764104225":
1802 double: 1
1803 +float: 1
1804 +idouble: 1
1805 +ifloat: 1
1806 +ldouble: 4
1807 +Test "sinh_downward (23) == 4872401723.124451299966006944252978187305":
1808 +double: 1
1809 +float: 1
1810 idouble: 1
1811 +ifloat: 1
1812 +Test "sinh_downward (24) == 13244561064.92173614705070540368454568168":
1813 +float: 1
1814 +ifloat: 1
1815 +ldouble: 5
1816
1817 -# tgamma
1818 -Test "tgamma (-0.5) == -2 sqrt (pi)":
1819 -double: 2
1820 +# sinh_tonearest
1821 +Test "sinh_tonearest (22) == 1792456423.065795780701106568345764104225":
1822 +ldouble: 3
1823 +Test "sinh_tonearest (23) == 4872401723.124451299966006944252978187305":
1824 +ldouble: 1
1825 +Test "sinh_tonearest (24) == 13244561064.92173614705070540368454568168":
1826 +ldouble: 6
1827 +
1828 +# sinh_towardzero
1829 +Test "sinh_towardzero (22) == 1792456423.065795780701106568345764104225":
1830 +double: 1
1831 +float: 1
1832 +idouble: 1
1833 +ifloat: 1
1834 +ldouble: 4
1835 +Test "sinh_towardzero (23) == 4872401723.124451299966006944252978187305":
1836 +double: 1
1837 +float: 1
1838 +idouble: 1
1839 +ifloat: 1
1840 +Test "sinh_towardzero (24) == 13244561064.92173614705070540368454568168":
1841 +float: 1
1842 +ifloat: 1
1843 +ldouble: 5
1844 +
1845 +# sinh_upward
1846 +Test "sinh_upward (22) == 1792456423.065795780701106568345764104225":
1847 +ldouble: 16
1848 +Test "sinh_upward (23) == 4872401723.124451299966006944252978187305":
1849 +ldouble: 27
1850 +Test "sinh_upward (24) == 13244561064.92173614705070540368454568168":
1851 +double: 1
1852 +idouble: 1
1853 +ldouble: 7
1854 +
1855 +# tan_downward
1856 +Test "tan_downward (1) == 1.5574077246549022305069748074583601730873":
1857 +double: 1
1858 +float: 1
1859 +idouble: 1
1860 +ifloat: 1
1861 +Test "tan_downward (10) == 0.6483608274590866712591249330098086768169":
1862 +float: 1
1863 +ifloat: 1
1864 +Test "tan_downward (2) == -2.1850398632615189916433061023136825434320":
1865 +double: 1
1866 +float: 1
1867 +idouble: 1
1868 +ifloat: 1
1869 +Test "tan_downward (3) == -0.1425465430742778052956354105339134932261":
1870 +double: 1
1871 +idouble: 1
1872 +Test "tan_downward (4) == 1.1578212823495775831373424182673239231198":
1873 float: 1
1874 -idouble: 2
1875 ifloat: 1
1876 ildouble: 1
1877 ldouble: 1
1878 -Test "tgamma (0.5) == sqrt (pi)":
1879 +Test "tan_downward (5) == -3.3805150062465856369827058794473439087096":
1880 +ildouble: 1
1881 +ldouble: 1
1882 +Test "tan_downward (6) == -0.2910061913847491570536995888681755428312":
1883 +double: 1
1884 float: 1
1885 +idouble: 1
1886 ifloat: 1
1887 -Test "tgamma (0.7) == 1.29805533264755778568117117915281162":
1888 +Test "tan_downward (7) == 0.8714479827243187364564508896003135663222":
1889 +double: 1
1890 +idouble: 1
1891 +Test "tan_downward (8) == -6.7997114552203786999252627596086333648814":
1892 +float: 1
1893 +ifloat: 1
1894 +ildouble: 1
1895 +ldouble: 1
1896 +Test "tan_downward (9) == -0.4523156594418098405903708757987855343087":
1897 +float: 1
1898 +ifloat: 1
1899 +
1900 +# tan_tonearest
1901 +Test "tan_tonearest (6) == -0.2910061913847491570536995888681755428312":
1902 +ildouble: 1
1903 +ldouble: 1
1904 +Test "tan_tonearest (8) == -6.7997114552203786999252627596086333648814":
1905 +ildouble: 1
1906 +ldouble: 1
1907 +Test "tan_tonearest (9) == -0.4523156594418098405903708757987855343087":
1908 +ildouble: 1
1909 +ldouble: 1
1910 +
1911 +# tan_towardzero
1912 +Test "tan_towardzero (1) == 1.5574077246549022305069748074583601730873":
1913 double: 1
1914 float: 1
1915 idouble: 1
1916 ifloat: 1
1917 -Test "tgamma (4) == 6":
1918 +Test "tan_towardzero (10) == 0.6483608274590866712591249330098086768169":
1919 +float: 1
1920 +ifloat: 1
1921 +Test "tan_towardzero (2) == -2.1850398632615189916433061023136825434320":
1922 +ildouble: 1
1923 +ldouble: 1
1924 +Test "tan_towardzero (3) == -0.1425465430742778052956354105339134932261":
1925 +float: 1
1926 +ifloat: 1
1927 +ildouble: 1
1928 +ldouble: 1
1929 +Test "tan_towardzero (4) == 1.1578212823495775831373424182673239231198":
1930 +float: 1
1931 +ifloat: 1
1932 +ildouble: 1
1933 +ldouble: 1
1934 +Test "tan_towardzero (5) == -3.3805150062465856369827058794473439087096":
1935 +double: 1
1936 +float: 1
1937 +idouble: 1
1938 +ifloat: 1
1939 +Test "tan_towardzero (6) == -0.2910061913847491570536995888681755428312":
1940 +ildouble: 1
1941 +ldouble: 1
1942 +Test "tan_towardzero (7) == 0.8714479827243187364564508896003135663222":
1943 +double: 1
1944 +idouble: 1
1945 +Test "tan_towardzero (8) == -6.7997114552203786999252627596086333648814":
1946 +double: 1
1947 +idouble: 1
1948 +ildouble: 2
1949 +ldouble: 2
1950 +Test "tan_towardzero (9) == -0.4523156594418098405903708757987855343087":
1951 +double: 1
1952 +idouble: 1
1953 ildouble: 1
1954 ldouble: 1
1955
1956 -# y0
1957 -Test "y0 (0.125) == -1.38968062514384052915582277745018693":
1958 +# tan_upward
1959 +Test "tan_upward (1) == 1.5574077246549022305069748074583601730873":
1960 ildouble: 1
1961 ldouble: 1
1962 -Test "y0 (0.75) == -0.137172769385772397522814379396581855":
1963 +Test "tan_upward (10) == 0.6483608274590866712591249330098086768169":
1964 +double: 1
1965 +idouble: 1
1966 +ildouble: 1
1967 +ldouble: 1
1968 +Test "tan_upward (2) == -2.1850398632615189916433061023136825434320":
1969 +ildouble: 1
1970 +ldouble: 1
1971 +Test "tan_upward (3) == -0.1425465430742778052956354105339134932261":
1972 +float: 1
1973 +ifloat: 1
1974 +ildouble: 1
1975 +ldouble: 1
1976 +Test "tan_upward (4) == 1.1578212823495775831373424182673239231198":
1977 +double: 1
1978 +idouble: 1
1979 +Test "tan_upward (5) == -3.3805150062465856369827058794473439087096":
1980 double: 1
1981 float: 1
1982 idouble: 1
1983 ifloat: 1
1984 -Test "y0 (1.0) == 0.0882569642156769579829267660235151628":
1985 +Test "tan_upward (6) == -0.2910061913847491570536995888681755428312":
1986 +ildouble: 1
1987 +ldouble: 1
1988 +Test "tan_upward (7) == 0.8714479827243187364564508896003135663222":
1989 +float: 1
1990 +ifloat: 1
1991 +ildouble: 1
1992 +ldouble: 1
1993 +Test "tan_upward (8) == -6.7997114552203786999252627596086333648814":
1994 +double: 1
1995 +idouble: 1
1996 +ildouble: 2
1997 +ldouble: 2
1998 +Test "tan_upward (9) == -0.4523156594418098405903708757987855343087":
1999 +double: 1
2000 +idouble: 1
2001 +ildouble: 1
2002 +ldouble: 1
2003 +
2004 +# tgamma
2005 +Test "tgamma (-0.5) == -2 sqrt (pi)":
2006 double: 2
2007 float: 1
2008 idouble: 2
2009 ifloat: 1
2010 ildouble: 1
2011 ldouble: 1
2012 -Test "y0 (1.5) == 0.382448923797758843955068554978089862":
2013 +Test "tgamma (0.5) == sqrt (pi)":
2014 +float: 1
2015 +ifloat: 1
2016 +Test "tgamma (0.7) == 1.29805533264755778568117117915281162":
2017 double: 1
2018 float: 1
2019 idouble: 1
2020 ifloat: 1
2021 -Test "y0 (10.0) == 0.0556711672835993914244598774101900481":
2022 +
2023 +# y0
2024 +Test "y0 (0.125) == -1.38968062514384052915582277745018693":
2025 +ildouble: 1
2026 +ldouble: 1
2027 +Test "y0 (0.75) == -0.137172769385772397522814379396581855":
2028 double: 1
2029 float: 1
2030 idouble: 1
2031 ifloat: 1
2032 +Test "y0 (1.0) == 0.0882569642156769579829267660235151628":
2033 +ildouble: 1
2034 +ldouble: 1
2035 +Test "y0 (10.0) == 0.0556711672835993914244598774101900481":
2036 +float: 1
2037 +ifloat: 1
2038 ildouble: 1
2039 ldouble: 1
2040 Test "y0 (8.0) == 0.223521489387566220527323400498620359":
2041 -double: 1
2042 float: 1
2043 -idouble: 1
2044 ifloat: 1
2045 ildouble: 1
2046 ldouble: 1
2047 @@ -766,9 +1211,6 @@ ldouble: 1
2048 Test "y1 (0.125) == -5.19993611253477499595928744876579921":
2049 ildouble: 1
2050 ldouble: 1
2051 -Test "y1 (1.0) == -0.781212821300288716547150000047964821":
2052 -double: 1
2053 -idouble: 1
2054 Test "y1 (10.0) == 0.249015424206953883923283474663222803":
2055 double: 2
2056 float: 2
2057 @@ -782,9 +1224,7 @@ ifloat: 2
2058 ildouble: 1
2059 ldouble: 1
2060 Test "y1 (8.0) == -0.158060461731247494255555266187483550":
2061 -double: 1
2062 float: 2
2063 -idouble: 1
2064 ifloat: 2
2065 ildouble: 1
2066 ldouble: 1
2067 @@ -799,37 +1239,21 @@ float: 1
2068 idouble: 1
2069 ifloat: 1
2070 Test "yn (0, 1.0) == 0.0882569642156769579829267660235151628":
2071 -double: 2
2072 -float: 1
2073 -idouble: 2
2074 -ifloat: 1
2075 ildouble: 1
2076 ldouble: 1
2077 -Test "yn (0, 1.5) == 0.382448923797758843955068554978089862":
2078 -double: 1
2079 -float: 1
2080 -idouble: 1
2081 -ifloat: 1
2082 Test "yn (0, 10.0) == 0.0556711672835993914244598774101900481":
2083 -double: 1
2084 float: 1
2085 -idouble: 1
2086 ifloat: 1
2087 ildouble: 1
2088 ldouble: 1
2089 Test "yn (0, 8.0) == 0.223521489387566220527323400498620359":
2090 -double: 1
2091 float: 1
2092 -idouble: 1
2093 ifloat: 1
2094 ildouble: 1
2095 ldouble: 1
2096 Test "yn (1, 0.125) == -5.19993611253477499595928744876579921":
2097 ildouble: 1
2098 ldouble: 1
2099 -Test "yn (1, 1.0) == -0.781212821300288716547150000047964821":
2100 -double: 1
2101 -idouble: 1
2102 Test "yn (1, 10.0) == 0.249015424206953883923283474663222803":
2103 double: 2
2104 float: 2
2105 @@ -843,17 +1267,13 @@ ifloat: 2
2106 ildouble: 1
2107 ldouble: 1
2108 Test "yn (1, 8.0) == -0.158060461731247494255555266187483550":
2109 -double: 1
2110 float: 2
2111 -idouble: 1
2112 ifloat: 2
2113 ildouble: 1
2114 ldouble: 1
2115 Test "yn (10, 0.125) == -127057845771019398.252538486899753195":
2116 double: 1
2117 -float: 1
2118 idouble: 1
2119 -ifloat: 1
2120 ildouble: 2
2121 ldouble: 2
2122 Test "yn (10, 0.75) == -2133501638.90573424452445412893839236":
2123 @@ -862,28 +1282,22 @@ ifloat: 1
2124 ildouble: 4
2125 ldouble: 4
2126 Test "yn (10, 1.0) == -121618014.278689189288130426667971145":
2127 -double: 1
2128 float: 2
2129 -idouble: 1
2130 ifloat: 2
2131 Test "yn (10, 10.0) == -0.359814152183402722051986577343560609":
2132 double: 1
2133 -float: 3
2134 +float: 1
2135 idouble: 1
2136 -ifloat: 3
2137 +ifloat: 1
2138 Test "yn (10, 2.0) == -129184.542208039282635913145923304214":
2139 -double: 2
2140 float: 3
2141 -idouble: 2
2142 ifloat: 3
2143 Test "yn (3, 0.125) == -2612.69757350066712600220955744091741":
2144 ildouble: 1
2145 ldouble: 1
2146 Test "yn (3, 0.75) == -12.9877176234475433186319774484809207":
2147 double: 1
2148 -float: 1
2149 idouble: 1
2150 -ifloat: 1
2151 ildouble: 2
2152 ldouble: 2
2153 Test "yn (3, 10.0) == -0.251362657183837329779204747654240998":
2154 @@ -892,15 +1306,13 @@ float: 1
2155 idouble: 1
2156 ifloat: 1
2157 Test "yn (3, 2.0) == -1.12778377684042778608158395773179238":
2158 -double: 1
2159 float: 1
2160 -idouble: 1
2161 ifloat: 1
2162
2163 # Maximal error of functions:
2164 Function: "acos":
2165 -ildouble: 622
2166 -ldouble: 622
2167 +ildouble: 1
2168 +ldouble: 1
2169
2170 Function: "asin":
2171 ildouble: 1
2172 @@ -917,18 +1329,6 @@ ildouble: 2
2173 ldouble: 2
2174
2175 Function: Real part of "cacosh":
2176 -double: 1
2177 -float: 9
2178 -idouble: 1
2179 -ifloat: 9
2180 -ildouble: 6
2181 -ldouble: 6
2182 -
2183 -Function: Imaginary part of "cacosh":
2184 -double: 1
2185 -float: 4
2186 -idouble: 1
2187 -ifloat: 4
2188 ildouble: 1
2189 ldouble: 1
2190
2191 @@ -1033,8 +1433,6 @@ double: 1
2192 float: 1
2193 idouble: 1
2194 ifloat: 1
2195 -ildouble: 1
2196 -ldouble: 1
2197
2198 Function: "cos":
2199 double: 2
2200 @@ -1044,16 +1442,58 @@ ifloat: 1
2201 ildouble: 1
2202 ldouble: 1
2203
2204 -Function: "cosh":
2205 +Function: "cos_downward":
2206 +double: 1
2207 +float: 1
2208 +idouble: 1
2209 +ifloat: 1
2210 +ildouble: 1
2211 +ldouble: 1
2212 +
2213 +Function: "cos_tonearest":
2214 ildouble: 1
2215 +ldouble: 1
2216 +
2217 +Function: "cos_towardzero":
2218 +double: 1
2219 +float: 1
2220 +idouble: 1
2221 +ifloat: 1
2222 +ildouble: 1
2223 +ldouble: 1
2224 +
2225 +Function: "cos_upward":
2226 +double: 1
2227 +float: 1
2228 +idouble: 1
2229 +ifloat: 1
2230 +ildouble: 1
2231 +ldouble: 1
2232 +
2233 +Function: "cosh_downward":
2234 +double: 1
2235 +float: 1
2236 +ldouble: 2
2237 +
2238 +Function: "cosh_tonearest":
2239 +ldouble: 1
2240 +
2241 +Function: "cosh_towardzero":
2242 +double: 1
2243 +float: 1
2244 +ldouble: 2
2245 +
2246 +Function: "cosh_upward":
2247 +double: 1
2248 +ldouble: 1
2249
2250 Function: Real part of "cpow":
2251 double: 1
2252 float: 4
2253 idouble: 1
2254 ifloat: 4
2255 -ildouble: 763
2256 -ldouble: 763
2257 +ildouble: 6
2258 +ldouble: 6
2259
2260 Function: Imaginary part of "cpow":
2261 double: 2
2262 @@ -1086,38 +1526,32 @@ double: 1
2263 float: 1
2264 idouble: 1
2265 ifloat: 1
2266 -ildouble: 2
2267 -ldouble: 2
2268
2269 Function: Real part of "ctan":
2270 double: 1
2271 idouble: 1
2272 -ildouble: 439
2273 -ldouble: 439
2274 +ildouble: 1
2275 +ldouble: 1
2276
2277 Function: Imaginary part of "ctan":
2278 -double: 1
2279 float: 1
2280 -idouble: 1
2281 ifloat: 1
2282 ildouble: 3
2283 ldouble: 3
2284
2285 Function: Real part of "ctanh":
2286 -double: 1
2287 float: 1
2288 -idouble: 1
2289 ifloat: 1
2290 -ildouble: 5
2291 -ldouble: 5
2292 +ildouble: 3
2293 +ldouble: 3
2294
2295 Function: Imaginary part of "ctanh":
2296 double: 1
2297 float: 1
2298 idouble: 1
2299 ifloat: 1
2300 -ildouble: 25
2301 -ldouble: 25
2302 +ildouble: 1
2303 +ldouble: 1
2304
2305 Function: "erf":
2306 double: 1
2307 @@ -1125,19 +1559,36 @@ idouble: 1
2308
2309 Function: "erfc":
2310 double: 1
2311 -float: 1
2312 idouble: 1
2313 -ifloat: 1
2314 ildouble: 1
2315 ldouble: 1
2316
2317 -Function: "exp":
2318 -ildouble: 754
2319 -
2320 Function: "exp10":
2321 ildouble: 8
2322 ldouble: 8
2323
2324 +Function: "exp_downward":
2325 +double: 1
2326 +float: 1
2327 +idouble: 1
2328 +ifloat: 1
2329 +ildouble: 2
2330 +ldouble: 2
2331 +
2332 +Function: "exp_towardzero":
2333 +double: 1
2334 +float: 1
2335 +idouble: 1
2336 +ifloat: 1
2337 +ildouble: 2
2338 +ldouble: 2
2339 +
2340 +Function: "exp_upward":
2341 +double: 1
2342 +float: 1
2343 +idouble: 1
2344 +ifloat: 1
2345 +
2346 Function: "expm1":
2347 ildouble: 1
2348
2349 @@ -1151,10 +1602,10 @@ Function: "hypot":
2350 float: 1
2351
2352 Function: "j0":
2353 -double: 3
2354 -float: 2
2355 -idouble: 3
2356 -ifloat: 2
2357 +double: 1
2358 +float: 1
2359 +idouble: 1
2360 +ifloat: 1
2361 ildouble: 1
2362 ldouble: 1
2363
2364 @@ -1167,10 +1618,10 @@ ildouble: 1
2365 ldouble: 1
2366
2367 Function: "jn":
2368 -double: 5
2369 -float: 2
2370 -idouble: 5
2371 -ifloat: 2
2372 +double: 1
2373 +float: 1
2374 +idouble: 1
2375 +ifloat: 1
2376 ildouble: 2
2377 ldouble: 2
2378
2379 @@ -1192,6 +1643,58 @@ ifloat: 1
2380 ildouble: 1
2381 ldouble: 1
2382
2383 +Function: "pow_downward":
2384 +double: 1
2385 +float: 1
2386 +idouble: 1
2387 +ifloat: 1
2388 +ildouble: 1
2389 +ldouble: 1
2390 +
2391 +Function: "pow_towardzero":
2392 +double: 1
2393 +float: 1
2394 +idouble: 1
2395 +ifloat: 1
2396 +ildouble: 1
2397 +ldouble: 1
2398 +
2399 +Function: "pow_upward":
2400 +double: 1
2401 +float: 1
2402 +idouble: 1
2403 +ifloat: 1
2404 +ildouble: 1
2405 +ldouble: 1
2406 +
2407 +Function: "sin_downward":
2408 +double: 1
2409 +float: 1
2410 +idouble: 1
2411 +ifloat: 1
2412 +ildouble: 1
2413 +ldouble: 1
2414 +
2415 +Function: "sin_tonearest":
2416 +ildouble: 1
2417 +ldouble: 1
2418 +
2419 +Function: "sin_towardzero":
2420 +double: 1
2421 +float: 1
2422 +idouble: 1
2423 +ifloat: 1
2424 +ildouble: 1
2425 +ldouble: 1
2426 +
2427 +Function: "sin_upward":
2428 +double: 1
2429 +float: 1
2430 +idouble: 1
2431 +ifloat: 1
2432 +ildouble: 1
2433 +ldouble: 1
2434 +
2435 Function: "sincos":
2436 double: 1
2437 float: 1
2438 @@ -1201,13 +1704,62 @@ ildouble: 1
2439 ldouble: 1
2440
2441 Function: "sinh":
2442 -double: 1
2443 ildouble: 1
2444
2445 +Function: "sinh_downward":
2446 +double: 1
2447 +float: 1
2448 +idouble: 1
2449 +ifloat: 1
2450 +ldouble: 5
2451 +
2452 +Function: "sinh_tonearest":
2453 +ldouble: 6
2454 +
2455 +Function: "sinh_towardzero":
2456 +double: 1
2457 +float: 1
2458 +idouble: 1
2459 +ifloat: 1
2460 +ldouble: 5
2461 +
2462 +Function: "sinh_upward":
2463 +double: 1
2464 +idouble: 1
2465 +ldouble: 27
2466 +
2467 Function: "tan":
2468 double: 1
2469 idouble: 1
2470
2471 +Function: "tan_downward":
2472 +double: 1
2473 +float: 1
2474 +idouble: 1
2475 +ifloat: 1
2476 +ildouble: 1
2477 +ldouble: 1
2478 +
2479 +Function: "tan_tonearest":
2480 +ildouble: 1
2481 +ldouble: 1
2482 +
2483 +Function: "tan_towardzero":
2484 +double: 1
2485 +float: 1
2486 +idouble: 1
2487 +ifloat: 1
2488 +ildouble: 2
2489 +ldouble: 2
2490 +
2491 +Function: "tan_upward":
2492 +double: 1
2493 +float: 1
2494 +idouble: 1
2495 +ifloat: 1
2496 +ildouble: 2
2497 +ldouble: 2
2498 +
2499 Function: "tgamma":
2500 double: 2
2501 float: 1
2502 @@ -1217,9 +1769,9 @@ ildouble: 1
2503 ldouble: 1
2504
2505 Function: "y0":
2506 -double: 2
2507 +double: 1
2508 float: 1
2509 -idouble: 2
2510 +idouble: 1
2511 ifloat: 1
2512 ildouble: 1
2513 ldouble: 1
2514 diff -Nrup a/sysdeps/ieee754/dbl-64/e_exp.c b/sysdeps/ieee754/dbl-64/e_exp.c
2515 --- a/sysdeps/ieee754/dbl-64/e_exp.c 2010-05-04 05:27:23.000000000 -0600
2516 +++ b/sysdeps/ieee754/dbl-64/e_exp.c 2012-08-06 09:54:00.823929687 -0600
2517 @@ -1,7 +1,7 @@
2518 /*
2519 * IBM Accurate Mathematical Library
2520 * written by International Business Machines Corp.
2521 - * Copyright (C) 2001 Free Software Foundation
2522 + * Copyright (C) 2001-2012 Free Software Foundation
2523 *
2524 * This program is free software; you can redistribute it and/or modify
2525 * it under the terms of the GNU Lesser General Public License as published by
2526 @@ -39,6 +39,7 @@
2527 #include "MathLib.h"
2528 #include "uexp.tbl"
2529 #include "math_private.h"
2530 +#include <fenv.h>
2531
2532 double __slowexp(double);
2533
2534 @@ -53,6 +54,10 @@ double __ieee754_exp(double x) {
2535 int4 k;
2536 #endif
2537 int4 i,j,m,n,ex;
2538 + fenv_t env;
2539 + double retval;
2540 +
2541 + libc_feholdexcept_setround (&env, FE_TONEAREST);
2542
2543 junk1.x = x;
2544 m = junk1.i[HIGH_HALF];
2545 @@ -85,18 +90,19 @@ double __ieee754_exp(double x) {
2546 rem=(bet + bet*eps)+al*eps;
2547 res = al + rem;
2548 cor = (al - res) + rem;
2549 - if (res == (res+cor*err_0)) return res*binexp.x;
2550 - else return __slowexp(x); /*if error is over bound */
2551 + if (res == (res+cor*err_0)) { retval = res*binexp.x; goto ret; }
2552 + else { retval = __slowexp(x); goto ret; } /*if error is over bound */
2553 }
2554
2555 - if (n <= smallint) return 1.0;
2556 + if (n <= smallint) { retval = 1.0; goto ret; }
2557
2558 if (n >= badint) {
2559 - if (n > infint) return(x+x); /* x is NaN */
2560 - if (n < infint) return ( (x>0) ? (hhuge*hhuge) : (tiny*tiny) );
2561 + if (n > infint) { retval = x+x; goto ret; } /* x is NaN */
2562 + if (n < infint) { retval = (x>0) ? (hhuge*hhuge) : (tiny*tiny); goto ret; }
2563 /* x is finite, cause either overflow or underflow */
2564 - if (junk1.i[LOW_HALF] != 0) return (x+x); /* x is NaN */
2565 - return ((x>0)?inf.x:zero ); /* |x| = inf; return either inf or 0 */
2566 + if (junk1.i[LOW_HALF] != 0) { retval = x+x; goto ret; } /* x is NaN */
2567 + retval = (x>0)?inf.x:zero; /* |x| = inf; return either inf or 0 */
2568 + goto ret;
2569 }
2570
2571 y = x*log2e.x + three51.x;
2572 @@ -121,8 +127,8 @@ double __ieee754_exp(double x) {
2573 if (res < 1.0) {res+=res; cor+=cor; ex-=1;}
2574 if (ex >=-1022) {
2575 binexp.i[HIGH_HALF] = (1023+ex)<<20;
2576 - if (res == (res+cor*err_0)) return res*binexp.x;
2577 - else return __slowexp(x); /*if error is over bound */
2578 + if (res == (res+cor*err_0)) { retval = res*binexp.x; goto ret; }
2579 + else { retval = __slowexp(x); goto ret; } /*if error is over bound */
2580 }
2581 ex = -(1022+ex);
2582 binexp.i[HIGH_HALF] = (1023-ex)<<20;
2583 @@ -135,15 +141,19 @@ double __ieee754_exp(double x) {
2584 cor = (t-res)+y;
2585 if (res == (res + eps*cor))
2586 { binexp.i[HIGH_HALF] = 0x00100000;
2587 - return (res-1.0)*binexp.x;
2588 + retval = (res-1.0)*binexp.x;
2589 + goto ret;
2590 }
2591 - else return __slowexp(x); /* if error is over bound */
2592 + else { retval = __slowexp(x); goto ret; } /* if error is over bound */
2593 }
2594 else {
2595 binexp.i[HIGH_HALF] =(junk1.i[LOW_HALF]+767)<<20;
2596 - if (res == (res+cor*err_0)) return res*binexp.x*t256.x;
2597 - else return __slowexp(x);
2598 + if (res == (res+cor*err_0)) { retval = res*binexp.x*t256.x; goto ret; }
2599 + else { retval = __slowexp(x); goto ret; }
2600 }
2601 + ret:
2602 + libc_feupdateenv (&env);
2603 + return retval;
2604 }
2605
2606 /************************************************************************/
2607 diff -Nrup a/sysdeps/ieee754/dbl-64/e_exp2.c b/sysdeps/ieee754/dbl-64/e_exp2.c
2608 --- a/sysdeps/ieee754/dbl-64/e_exp2.c 2010-05-04 05:27:23.000000000 -0600
2609 +++ b/sysdeps/ieee754/dbl-64/e_exp2.c 2012-08-06 09:54:00.824929683 -0600
2610 @@ -24,9 +24,6 @@
2611 17 (1), March 1991, pp. 26-45.
2612 It has been slightly modified to compute 2^x instead of e^x.
2613 */
2614 -#ifndef _GNU_SOURCE
2615 -#define _GNU_SOURCE
2616 -#endif
2617 #include <stdlib.h>
2618 #include <float.h>
2619 #include <ieee754.h>
2620 @@ -37,13 +34,8 @@
2621
2622 #include "t_exp2.h"
2623
2624 -/* XXX I know the assembler generates a warning about incorrect section
2625 - attributes. But without the attribute here the compiler places the
2626 - constants in the .data section. Ideally the constant is placed in
2627 - .rodata.cst8 so that it can be merged, but gcc sucks, it ICEs when
2628 - we try to force this section on it. --drepper */
2629 -static const volatile double TWO1023 = 8.988465674311579539e+307;
2630 -static const volatile double TWOM1000 = 9.3326361850321887899e-302;
2631 +static const double TWO1023 = 8.988465674311579539e+307;
2632 +static const double TWOM1000 = 9.3326361850321887899e-302;
2633
2634 double
2635 __ieee754_exp2 (double x)
2636 @@ -60,11 +52,7 @@ __ieee754_exp2 (double x)
2637 union ieee754_double ex2_u, scale_u;
2638 fenv_t oldenv;
2639
2640 - feholdexcept (&oldenv);
2641 -#ifdef FE_TONEAREST
2642 - /* If we don't have this, it's too bad. */
2643 - fesetround (FE_TONEAREST);
2644 -#endif
2645 + libc_feholdexcept_setround (&oldenv, FE_TONEAREST);
2646
2647 /* 1. Argument reduction.
2648 Choose integers ex, -256 <= t < 256, and some real
2649 @@ -108,9 +96,10 @@ __ieee754_exp2 (double x)
2650 * x + .055504110254308625)
2651 * x + .240226506959100583)
2652 * x + .69314718055994495) * ex2_u.d;
2653 + math_opt_barrier (x22);
2654
2655 /* 5. Return (2^x2-1) * 2^(t/512+e+ex) + 2^(t/512+e+ex). */
2656 - fesetenv (&oldenv);
2657 + libc_fesetenv (&oldenv);
2658
2659 result = x22 * x + ex2_u.d;
2660
2661 diff -Nrup a/sysdeps/ieee754/dbl-64/e_pow.c b/sysdeps/ieee754/dbl-64/e_pow.c
2662 --- a/sysdeps/ieee754/dbl-64/e_pow.c 2010-05-04 05:27:23.000000000 -0600
2663 +++ b/sysdeps/ieee754/dbl-64/e_pow.c 2012-08-06 09:54:00.824929683 -0600
2664 @@ -42,6 +42,7 @@
2665 #include "MathLib.h"
2666 #include "upow.tbl"
2667 #include "math_private.h"
2668 +#include <fenv.h>
2669
2670
2671 double __exp1(double x, double xx, double error);
2672 @@ -79,6 +80,11 @@ double __ieee754_pow(double x, double y)
2673 (u.i[HIGH_HALF]==0 && u.i[LOW_HALF]!=0)) &&
2674 /* 2^-1023< x<= 2^-1023 * 0x1.0000ffffffff */
2675 (v.i[HIGH_HALF]&0x7fffffff) < 0x4ff00000) { /* if y<-1 or y>1 */
2676 + fenv_t env;
2677 + double retval;
2678 +
2679 + libc_feholdexcept_setround (&env, FE_TONEAREST);
2680 +
2681 z = log1(x,&aa,&error); /* x^y =e^(y log (X)) */
2682 t = y*134217729.0;
2683 y1 = t - (t-y);
2684 @@ -92,7 +98,10 @@ double __ieee754_pow(double x, double y)
2685 a2 = (a-a1)+aa;
2686 error = error*ABS(y);
2687 t = __exp1(a1,a2,1.9e16*error); /* return -10 or 0 if wasn't computed exactly */
2688 - return (t>0)?t:power1(x,y);
2689 + retval = (t>0)?t:power1(x,y);
2690 +
2691 + libc_feupdateenv (&env);
2692 + return retval;
2693 }
2694
2695 if (x == 0) {
2696 diff -Nrup a/sysdeps/ieee754/dbl-64/s_sin.c b/sysdeps/ieee754/dbl-64/s_sin.c
2697 --- a/sysdeps/ieee754/dbl-64/s_sin.c 2010-05-04 05:27:23.000000000 -0600
2698 +++ b/sysdeps/ieee754/dbl-64/s_sin.c 2012-08-06 09:54:00.827929671 -0600
2699 @@ -55,6 +55,7 @@
2700 #include "MathLib.h"
2701 #include "sincos.tbl"
2702 #include "math_private.h"
2703 +#include <fenv.h>
2704
2705 static const double
2706 sn3 = -1.66666666666664880952546298448555E-01,
2707 @@ -97,12 +98,16 @@ double __sin(double x){
2708 #if 0
2709 int4 nn;
2710 #endif
2711 + fenv_t env;
2712 + double retval = 0;
2713 +
2714 + libc_feholdexcept_setround (&env, FE_TONEAREST);
2715
2716 u.x = x;
2717 m = u.i[HIGH_HALF];
2718 k = 0x7fffffff&m; /* no sign */
2719 if (k < 0x3e500000) /* if x->0 =>sin(x)=x */
2720 - return x;
2721 + { retval = x; goto ret; }
2722 /*---------------------------- 2^-26 < |x|< 0.25 ----------------------*/
2723 else if (k < 0x3fd00000){
2724 xx = x*x;
2725 @@ -110,7 +115,8 @@ double __sin(double x){
2726 t = ((((s5.x*xx + s4.x)*xx + s3.x)*xx + s2.x)*xx + s1.x)*(xx*x);
2727 res = x+t;
2728 cor = (x-res)+t;
2729 - return (res == res + 1.07*cor)? res : slow(x);
2730 + retval = (res == res + 1.07*cor)? res : slow(x);
2731 + goto ret;
2732 } /* else if (k < 0x3fd00000) */
2733 /*---------------------------- 0.25<|x|< 0.855469---------------------- */
2734 else if (k < 0x3feb6000) {
2735 @@ -127,7 +133,8 @@ double __sin(double x){
2736 cor=(ssn+s*ccs-sn*c)+cs*s;
2737 res=sn+cor;
2738 cor=(sn-res)+cor;
2739 - return (res==res+1.025*cor)? res : slow1(x);
2740 + retval = (res==res+1.096*cor)? res : slow1(x);
2741 + goto ret;
2742 } /* else if (k < 0x3feb6000) */
2743
2744 /*----------------------- 0.855469 <|x|<2.426265 ----------------------*/
2745 @@ -153,7 +160,8 @@ double __sin(double x){
2746 cor=(ccs-s*ssn-cs*c)-sn*s;
2747 res=cs+cor;
2748 cor=(cs-res)+cor;
2749 - return (res==res+1.020*cor)? ((m>0)?res:-res) : slow2(x);
2750 + retval = (res==res+1.020*cor)? ((m>0)?res:-res) : slow2(x);
2751 + goto ret;
2752 } /* else if (k < 0x400368fd) */
2753
2754 /*-------------------------- 2.426265<|x|< 105414350 ----------------------*/
2755 @@ -179,7 +187,8 @@ double __sin(double x){
2756 res = a+t;
2757 cor = (a-res)+t;
2758 cor = (cor>0)? 1.02*cor+eps : 1.02*cor -eps;
2759 - return (res == res + cor)? res : sloww(a,da,x);
2760 + retval = (res == res + cor)? res : sloww(a,da,x);
2761 + goto ret;
2762 }
2763 else {
2764 if (a>0)
2765 @@ -200,7 +209,8 @@ double __sin(double x){
2766 res=sn+cor;
2767 cor=(sn-res)+cor;
2768 cor = (cor>0)? 1.035*cor+eps : 1.035*cor-eps;
2769 - return (res==res+cor)? ((m)?res:-res) : sloww1(a,da,x);
2770 + retval = (res==res+cor)? ((m)?res:-res) : sloww1(a,da,x);
2771 + goto ret;
2772 }
2773 break;
2774
2775 @@ -222,7 +232,8 @@ double __sin(double x){
2776 res=cs+cor;
2777 cor=(cs-res)+cor;
2778 cor = (cor>0)? 1.025*cor+eps : 1.025*cor-eps;
2779 - return (res==res+cor)? ((n&2)?-res:res) : sloww2(a,da,x,n);
2780 + retval = (res==res+cor)? ((n&2)?-res:res) : sloww2(a,da,x,n);
2781 + goto ret;
2782
2783 break;
2784
2785 @@ -258,7 +269,8 @@ double __sin(double x){
2786 res = a+t;
2787 cor = (a-res)+t;
2788 cor = (cor>0)? 1.02*cor+eps : 1.02*cor -eps;
2789 - return (res == res + cor)? res : bsloww(a,da,x,n);
2790 + retval = (res == res + cor)? res : bsloww(a,da,x,n);
2791 + goto ret;
2792 }
2793 else {
2794 if (a>0) {m=1;t=a;db=da;}
2795 @@ -277,7 +289,8 @@ double __sin(double x){
2796 res=sn+cor;
2797 cor=(sn-res)+cor;
2798 cor = (cor>0)? 1.035*cor+eps : 1.035*cor-eps;
2799 - return (res==res+cor)? ((m)?res:-res) : bsloww1(a,da,x,n);
2800 + retval = (res==res+cor)? ((m)?res:-res) : bsloww1(a,da,x,n);
2801 + goto ret;
2802 }
2803 break;
2804
2805 @@ -299,7 +312,8 @@ double __sin(double x){
2806 res=cs+cor;
2807 cor=(cs-res)+cor;
2808 cor = (cor>0)? 1.025*cor+eps : 1.025*cor-eps;
2809 - return (res==res+cor)? ((n&2)?-res:res) : bsloww2(a,da,x,n);
2810 + retval = (res==res+cor)? ((n&2)?-res:res) : bsloww2(a,da,x,n);
2811 + goto ret;
2812
2813 break;
2814
2815 @@ -313,17 +327,20 @@ double __sin(double x){
2816 n = __branred(x,&a,&da);
2817 switch (n) {
2818 case 0:
2819 - if (a*a < 0.01588) return bsloww(a,da,x,n);
2820 - else return bsloww1(a,da,x,n);
2821 + if (a*a < 0.01588) retval = bsloww(a,da,x,n);
2822 + else retval = bsloww1(a,da,x,n);
2823 + goto ret;
2824 break;
2825 case 2:
2826 - if (a*a < 0.01588) return bsloww(-a,-da,x,n);
2827 - else return bsloww1(-a,-da,x,n);
2828 + if (a*a < 0.01588) retval = bsloww(-a,-da,x,n);
2829 + else retval = bsloww1(-a,-da,x,n);
2830 + goto ret;
2831 break;
2832
2833 case 1:
2834 case 3:
2835 - return bsloww2(a,da,x,n);
2836 + retval = bsloww2(a,da,x,n);
2837 + goto ret;
2838 break;
2839 }
2840
2841 @@ -333,9 +350,13 @@ double __sin(double x){
2842 else {
2843 if (k == 0x7ff00000 && u.i[LOW_HALF] == 0)
2844 __set_errno (EDOM);
2845 - return x / x;
2846 + retval = x / x;
2847 + goto ret;
2848 }
2849 - return 0; /* unreachable */
2850 +
2851 + ret:
2852 + libc_feupdateenv (&env);
2853 + return retval;
2854 }
2855
2856
2857 @@ -350,11 +371,16 @@ double __cos(double x)
2858 mynumber u,v;
2859 int4 k,m,n;
2860
2861 + fenv_t env;
2862 + double retval = 0;
2863 +
2864 + libc_feholdexcept_setround (&env, FE_TONEAREST);
2865 +
2866 u.x = x;
2867 m = u.i[HIGH_HALF];
2868 k = 0x7fffffff&m;
2869
2870 - if (k < 0x3e400000 ) return 1.0; /* |x|<2^-27 => cos(x)=1 */
2871 + if (k < 0x3e400000 ) { retval = 1.0; goto ret; } /* |x|<2^-27 => cos(x)=1 */
2872
2873 else if (k < 0x3feb6000 ) {/* 2^-27 < |x| < 0.855469 */
2874 y=ABS(x);
2875 @@ -371,7 +397,8 @@ double __cos(double x)
2876 cor=(ccs-s*ssn-cs*c)-sn*s;
2877 res=cs+cor;
2878 cor=(cs-res)+cor;
2879 - return (res==res+1.020*cor)? res : cslow2(x);
2880 + retval = (res==res+1.020*cor)? res : cslow2(x);
2881 + goto ret;
2882
2883 } /* else if (k < 0x3feb6000) */
2884
2885 @@ -385,7 +412,8 @@ double __cos(double x)
2886 res = a+t;
2887 cor = (a-res)+t;
2888 cor = (cor>0)? 1.02*cor+1.0e-31 : 1.02*cor -1.0e-31;
2889 - return (res == res + cor)? res : csloww(a,da,x);
2890 + retval = (res == res + cor)? res : csloww(a,da,x);
2891 + goto ret;
2892 }
2893 else {
2894 if (a>0) {m=1;t=a;db=da;}
2895 @@ -404,7 +432,8 @@ double __cos(double x)
2896 res=sn+cor;
2897 cor=(sn-res)+cor;
2898 cor = (cor>0)? 1.035*cor+1.0e-31 : 1.035*cor-1.0e-31;
2899 - return (res==res+cor)? ((m)?res:-res) : csloww1(a,da,x);
2900 + retval = (res==res+cor)? ((m)?res:-res) : csloww1(a,da,x);
2901 + goto ret;
2902 }
2903
2904 } /* else if (k < 0x400368fd) */
2905 @@ -431,7 +460,8 @@ double __cos(double x)
2906 res = a+t;
2907 cor = (a-res)+t;
2908 cor = (cor>0)? 1.02*cor+eps : 1.02*cor -eps;
2909 - return (res == res + cor)? res : csloww(a,da,x);
2910 + retval = (res == res + cor)? res : csloww(a,da,x);
2911 + goto ret;
2912 }
2913 else {
2914 if (a>0) {m=1;t=a;db=da;}
2915 @@ -450,7 +480,8 @@ double __cos(double x)
2916 res=sn+cor;
2917 cor=(sn-res)+cor;
2918 cor = (cor>0)? 1.035*cor+eps : 1.035*cor-eps;
2919 - return (res==res+cor)? ((m)?res:-res) : csloww1(a,da,x);
2920 + retval = (res==res+cor)? ((m)?res:-res) : csloww1(a,da,x);
2921 + goto ret;
2922 }
2923 break;
2924
2925 @@ -471,7 +502,8 @@ double __cos(double x)
2926 res=cs+cor;
2927 cor=(cs-res)+cor;
2928 cor = (cor>0)? 1.025*cor+eps : 1.025*cor-eps;
2929 - return (res==res+cor)? ((n)?-res:res) : csloww2(a,da,x,n);
2930 + retval = (res==res+cor)? ((n)?-res:res) : csloww2(a,da,x,n);
2931 + goto ret;
2932
2933 break;
2934
2935 @@ -506,7 +538,8 @@ double __cos(double x)
2936 res = a+t;
2937 cor = (a-res)+t;
2938 cor = (cor>0)? 1.02*cor+eps : 1.02*cor -eps;
2939 - return (res == res + cor)? res : bsloww(a,da,x,n);
2940 + retval = (res == res + cor)? res : bsloww(a,da,x,n);
2941 + goto ret;
2942 }
2943 else {
2944 if (a>0) {m=1;t=a;db=da;}
2945 @@ -525,7 +558,8 @@ double __cos(double x)
2946 res=sn+cor;
2947 cor=(sn-res)+cor;
2948 cor = (cor>0)? 1.035*cor+eps : 1.035*cor-eps;
2949 - return (res==res+cor)? ((m)?res:-res) : bsloww1(a,da,x,n);
2950 + retval = (res==res+cor)? ((m)?res:-res) : bsloww1(a,da,x,n);
2951 + goto ret;
2952 }
2953 break;
2954
2955 @@ -546,7 +580,8 @@ double __cos(double x)
2956 res=cs+cor;
2957 cor=(cs-res)+cor;
2958 cor = (cor>0)? 1.025*cor+eps : 1.025*cor-eps;
2959 - return (res==res+cor)? ((n)?-res:res) : bsloww2(a,da,x,n);
2960 + retval = (res==res+cor)? ((n)?-res:res) : bsloww2(a,da,x,n);
2961 + goto ret;
2962 break;
2963
2964 }
2965 @@ -558,17 +593,20 @@ double __cos(double x)
2966 n = __branred(x,&a,&da);
2967 switch (n) {
2968 case 1:
2969 - if (a*a < 0.01588) return bsloww(-a,-da,x,n);
2970 - else return bsloww1(-a,-da,x,n);
2971 + if (a*a < 0.01588) retval = bsloww(-a,-da,x,n);
2972 + else retval = bsloww1(-a,-da,x,n);
2973 + goto ret;
2974 break;
2975 case 3:
2976 - if (a*a < 0.01588) return bsloww(a,da,x,n);
2977 - else return bsloww1(a,da,x,n);
2978 + if (a*a < 0.01588) retval = bsloww(a,da,x,n);
2979 + else retval = bsloww1(a,da,x,n);
2980 + goto ret;
2981 break;
2982
2983 case 0:
2984 case 2:
2985 - return bsloww2(a,da,x,n);
2986 + retval = bsloww2(a,da,x,n);
2987 + goto ret;
2988 break;
2989 }
2990
2991 @@ -580,10 +618,13 @@ double __cos(double x)
2992 else {
2993 if (k == 0x7ff00000 && u.i[LOW_HALF] == 0)
2994 __set_errno (EDOM);
2995 - return x / x; /* |x| > 2^1024 */
2996 + retval = x / x; /* |x| > 2^1024 */
2997 + goto ret;
2998 }
2999 - return 0;
3000
3001 + ret:
3002 + libc_feupdateenv (&env);
3003 + return retval;
3004 }
3005
3006 /************************************************************************/
3007 diff -Nrup a/sysdeps/ieee754/dbl-64/s_tan.c b/sysdeps/ieee754/dbl-64/s_tan.c
3008 --- a/sysdeps/ieee754/dbl-64/s_tan.c 2010-05-04 05:27:23.000000000 -0600
3009 +++ b/sysdeps/ieee754/dbl-64/s_tan.c 2012-08-06 09:54:00.828929666 -0600
3010 @@ -40,6 +40,8 @@
3011 #include "mpa.h"
3012 #include "MathLib.h"
3013 #include "math.h"
3014 +#include "math_private.h"
3015 +#include <fenv.h>
3016
3017 static double tanMp(double);
3018 void __mptan(double, mp_no *, int);
3019 @@ -58,21 +60,27 @@ double tan(double x) {
3020 mp_no mpy;
3021 #endif
3022
3023 + fenv_t env;
3024 + double retval;
3025 +
3026 int __branred(double, double *, double *);
3027 int __mpranred(double, mp_no *, int);
3028
3029 + libc_feholdexcept_setround (&env, FE_TONEAREST);
3030 +
3031 /* x=+-INF, x=NaN */
3032 num.d = x; ux = num.i[HIGH_HALF];
3033 if ((ux&0x7ff00000)==0x7ff00000) {
3034 if ((ux&0x7fffffff)==0x7ff00000)
3035 __set_errno (EDOM);
3036 - return x-x;
3037 + retval = x-x;
3038 + goto ret;
3039 }
3040
3041 w=(x<ZERO) ? -x : x;
3042
3043 /* (I) The case abs(x) <= 1.259e-8 */
3044 - if (w<=g1.d) return x;
3045 + if (w<=g1.d) { retval = x; goto ret; }
3046
3047 /* (II) The case 1.259e-8 < abs(x) <= 0.0608 */
3048 if (w<=g2.d) {
3049 @@ -80,7 +88,7 @@ double tan(double x) {
3050 /* First stage */
3051 x2 = x*x;
3052 t2 = x*x2*(d3.d+x2*(d5.d+x2*(d7.d+x2*(d9.d+x2*d11.d))));
3053 - if ((y=x+(t2-u1.d*t2)) == x+(t2+u1.d*t2)) return y;
3054 + if ((y=x+(t2-u1.d*t2)) == x+(t2+u1.d*t2)) { retval = y; goto ret; }
3055
3056 /* Second stage */
3057 c1 = x2*(a15.d+x2*(a17.d+x2*(a19.d+x2*(a21.d+x2*(a23.d+x2*(a25.d+
3058 @@ -100,8 +108,9 @@ double tan(double x) {
3059 MUL2(x2,xx2,c2,cc2,c1,cc1,t1,t2,t3,t4,t5,t6,t7,t8)
3060 MUL2(x ,zero.d,c1,cc1,c2,cc2,t1,t2,t3,t4,t5,t6,t7,t8)
3061 ADD2(x ,zero.d,c2,cc2,c1,cc1,t1,t2)
3062 - if ((y=c1+(cc1-u2.d*c1)) == c1+(cc1+u2.d*c1)) return y;
3063 - return tanMp(x);
3064 + if ((y=c1+(cc1-u2.d*c1)) == c1+(cc1+u2.d*c1)) { retval = y; goto ret; }
3065 + retval = tanMp(x);
3066 + goto ret;
3067 }
3068
3069 /* (III) The case 0.0608 < abs(x) <= 0.787 */
3070 @@ -112,10 +121,10 @@ double tan(double x) {
3071 z = w-xfg[i][0].d; z2 = z*z; s = (x<ZERO) ? MONE : ONE;
3072 pz = z+z*z2*(e0.d+z2*e1.d);
3073 fi = xfg[i][1].d; gi = xfg[i][2].d; t2 = pz*(gi+fi)/(gi-pz);
3074 - if ((y=fi+(t2-fi*u3.d))==fi+(t2+fi*u3.d)) return (s*y);
3075 + if ((y=fi+(t2-fi*u3.d))==fi+(t2+fi*u3.d)) { retval = (s*y); goto ret; }
3076 t3 = (t2<ZERO) ? -t2 : t2;
3077 t4 = fi*ua3.d+t3*ub3.d;
3078 - if ((y=fi+(t2-t4))==fi+(t2+t4)) return (s*y);
3079 + if ((y=fi+(t2-t4))==fi+(t2+t4)) { retval = (s*y); goto ret; }
3080
3081 /* Second stage */
3082 ffi = xfg[i][3].d;
3083 @@ -133,8 +142,9 @@ double tan(double x) {
3084 SUB2(one.d,zero.d,c3,cc3,c1,cc1,t1,t2)
3085 DIV2(c2,cc2,c1,cc1,c3,cc3,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10)
3086
3087 - if ((y=c3+(cc3-u4.d*c3))==c3+(cc3+u4.d*c3)) return (s*y);
3088 - return tanMp(x);
3089 + if ((y=c3+(cc3-u4.d*c3))==c3+(cc3+u4.d*c3)) { retval = (s*y); goto ret; }
3090 + retval = tanMp(x);
3091 + goto ret;
3092 }
3093
3094 /* (---) The case 0.787 < abs(x) <= 25 */
3095 @@ -152,7 +162,7 @@ double tan(double x) {
3096 else {ya= a; yya= da; sy= ONE;}
3097
3098 /* (IV),(V) The case 0.787 < abs(x) <= 25, abs(y) <= 1e-7 */
3099 - if (ya<=gy1.d) return tanMp(x);
3100 + if (ya<=gy1.d) { retval = tanMp(x); goto ret; }
3101
3102 /* (VI) The case 0.787 < abs(x) <= 25, 1e-7 < abs(y) <= 0.0608 */
3103 if (ya<=gy2.d) {
3104 @@ -162,10 +172,10 @@ double tan(double x) {
3105 /* First stage -cot */
3106 EADD(a,t2,b,db)
3107 DIV2(one.d,zero.d,b,db,c,dc,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10)
3108 - if ((y=c+(dc-u6.d*c))==c+(dc+u6.d*c)) return (-y); }
3109 + if ((y=c+(dc-u6.d*c))==c+(dc+u6.d*c)) { retval = (-y); goto ret; } }
3110 else {
3111 /* First stage tan */
3112 - if ((y=a+(t2-u5.d*a))==a+(t2+u5.d*a)) return y; }
3113 + if ((y=a+(t2-u5.d*a))==a+(t2+u5.d*a)) { retval = y; goto ret; } }
3114 /* Second stage */
3115 /* Range reduction by algorithm ii */
3116 t = (x*hpinv.d + toint.d);
3117 @@ -203,11 +213,12 @@ double tan(double x) {
3118 if (n) {
3119 /* Second stage -cot */
3120 DIV2(one.d,zero.d,c1,cc1,c2,cc2,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10)
3121 - if ((y=c2+(cc2-u8.d*c2)) == c2+(cc2+u8.d*c2)) return (-y); }
3122 + if ((y=c2+(cc2-u8.d*c2)) == c2+(cc2+u8.d*c2)) { retval = (-y); goto ret; } }
3123 else {
3124 /* Second stage tan */
3125 - if ((y=c1+(cc1-u7.d*c1)) == c1+(cc1+u7.d*c1)) return y; }
3126 - return tanMp(x);
3127 + if ((y=c1+(cc1-u7.d*c1)) == c1+(cc1+u7.d*c1)) { retval = y; goto ret; } }
3128 + retval = tanMp(x);
3129 + goto ret;
3130 }
3131
3132 /* (VII) The case 0.787 < abs(x) <= 25, 0.0608 < abs(y) <= 0.787 */
3133 @@ -221,17 +232,17 @@ double tan(double x) {
3134 if (n) {
3135 /* -cot */
3136 t2 = pz*(fi+gi)/(fi+pz);
3137 - if ((y=gi-(t2-gi*u10.d))==gi-(t2+gi*u10.d)) return (-sy*y);
3138 + if ((y=gi-(t2-gi*u10.d))==gi-(t2+gi*u10.d)) { retval = (-sy*y); goto ret; }
3139 t3 = (t2<ZERO) ? -t2 : t2;
3140 t4 = gi*ua10.d+t3*ub10.d;
3141 - if ((y=gi-(t2-t4))==gi-(t2+t4)) return (-sy*y); }
3142 + if ((y=gi-(t2-t4))==gi-(t2+t4)) { retval = (-sy*y); goto ret; } }
3143 else {
3144 /* tan */
3145 t2 = pz*(gi+fi)/(gi-pz);
3146 - if ((y=fi+(t2-fi*u9.d))==fi+(t2+fi*u9.d)) return (sy*y);
3147 + if ((y=fi+(t2-fi*u9.d))==fi+(t2+fi*u9.d)) { retval = (sy*y); goto ret; }
3148 t3 = (t2<ZERO) ? -t2 : t2;
3149 t4 = fi*ua9.d+t3*ub9.d;
3150 - if ((y=fi+(t2-t4))==fi+(t2+t4)) return (sy*y); }
3151 + if ((y=fi+(t2-t4))==fi+(t2+t4)) { retval = (sy*y); goto ret; } }
3152
3153 /* Second stage */
3154 ffi = xfg[i][3].d;
3155 @@ -252,13 +263,14 @@ double tan(double x) {
3156 if (n) {
3157 /* -cot */
3158 DIV2(c1,cc1,c2,cc2,c3,cc3,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10)
3159 - if ((y=c3+(cc3-u12.d*c3))==c3+(cc3+u12.d*c3)) return (-sy*y); }
3160 + if ((y=c3+(cc3-u12.d*c3))==c3+(cc3+u12.d*c3)) { retval = (-sy*y); goto ret; } }
3161 else {
3162 /* tan */
3163 DIV2(c2,cc2,c1,cc1,c3,cc3,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10)
3164 - if ((y=c3+(cc3-u11.d*c3))==c3+(cc3+u11.d*c3)) return (sy*y); }
3165 + if ((y=c3+(cc3-u11.d*c3))==c3+(cc3+u11.d*c3)) { retval = (sy*y); goto ret; } }
3166
3167 - return tanMp(x);
3168 + retval = tanMp(x);
3169 + goto ret;
3170 }
3171
3172 /* (---) The case 25 < abs(x) <= 1e8 */
3173 @@ -280,7 +292,7 @@ double tan(double x) {
3174 else {ya= a; yya= da; sy= ONE;}
3175
3176 /* (+++) The case 25 < abs(x) <= 1e8, abs(y) <= 1e-7 */
3177 - if (ya<=gy1.d) return tanMp(x);
3178 + if (ya<=gy1.d) { retval = tanMp(x); goto ret; }
3179
3180 /* (VIII) The case 25 < abs(x) <= 1e8, 1e-7 < abs(y) <= 0.0608 */
3181 if (ya<=gy2.d) {
3182 @@ -290,10 +302,10 @@ double tan(double x) {
3183 /* First stage -cot */
3184 EADD(a,t2,b,db)
3185 DIV2(one.d,zero.d,b,db,c,dc,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10)
3186 - if ((y=c+(dc-u14.d*c))==c+(dc+u14.d*c)) return (-y); }
3187 + if ((y=c+(dc-u14.d*c))==c+(dc+u14.d*c)) { retval = (-y); goto ret; } }
3188 else {
3189 /* First stage tan */
3190 - if ((y=a+(t2-u13.d*a))==a+(t2+u13.d*a)) return y; }
3191 + if ((y=a+(t2-u13.d*a))==a+(t2+u13.d*a)) { retval = y; goto ret; } }
3192
3193 /* Second stage */
3194 MUL2(a,da,a,da,x2,xx2,t1,t2,t3,t4,t5,t6,t7,t8)
3195 @@ -317,11 +329,12 @@ double tan(double x) {
3196 if (n) {
3197 /* Second stage -cot */
3198 DIV2(one.d,zero.d,c1,cc1,c2,cc2,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10)
3199 - if ((y=c2+(cc2-u16.d*c2)) == c2+(cc2+u16.d*c2)) return (-y); }
3200 + if ((y=c2+(cc2-u16.d*c2)) == c2+(cc2+u16.d*c2)) { retval = (-y); goto ret; } }
3201 else {
3202 /* Second stage tan */
3203 - if ((y=c1+(cc1-u15.d*c1)) == c1+(cc1+u15.d*c1)) return (y); }
3204 - return tanMp(x);
3205 + if ((y=c1+(cc1-u15.d*c1)) == c1+(cc1+u15.d*c1)) { retval = (y); goto ret; } }
3206 + retval = tanMp(x);
3207 + goto ret;
3208 }
3209
3210 /* (IX) The case 25 < abs(x) <= 1e8, 0.0608 < abs(y) <= 0.787 */
3211 @@ -334,17 +347,17 @@ double tan(double x) {
3212 if (n) {
3213 /* -cot */
3214 t2 = pz*(fi+gi)/(fi+pz);
3215 - if ((y=gi-(t2-gi*u18.d))==gi-(t2+gi*u18.d)) return (-sy*y);
3216 + if ((y=gi-(t2-gi*u18.d))==gi-(t2+gi*u18.d)) { retval = (-sy*y); goto ret; }
3217 t3 = (t2<ZERO) ? -t2 : t2;
3218 t4 = gi*ua18.d+t3*ub18.d;
3219 - if ((y=gi-(t2-t4))==gi-(t2+t4)) return (-sy*y); }
3220 + if ((y=gi-(t2-t4))==gi-(t2+t4)) { retval = (-sy*y); goto ret; } }
3221 else {
3222 /* tan */
3223 t2 = pz*(gi+fi)/(gi-pz);
3224 - if ((y=fi+(t2-fi*u17.d))==fi+(t2+fi*u17.d)) return (sy*y);
3225 + if ((y=fi+(t2-fi*u17.d))==fi+(t2+fi*u17.d)) { retval = (sy*y); goto ret; }
3226 t3 = (t2<ZERO) ? -t2 : t2;
3227 t4 = fi*ua17.d+t3*ub17.d;
3228 - if ((y=fi+(t2-t4))==fi+(t2+t4)) return (sy*y); }
3229 + if ((y=fi+(t2-t4))==fi+(t2+t4)) { retval = (sy*y); goto ret; } }
3230
3231 /* Second stage */
3232 ffi = xfg[i][3].d;
3233 @@ -365,12 +378,13 @@ double tan(double x) {
3234 if (n) {
3235 /* -cot */
3236 DIV2(c1,cc1,c2,cc2,c3,cc3,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10)
3237 - if ((y=c3+(cc3-u20.d*c3))==c3+(cc3+u20.d*c3)) return (-sy*y); }
3238 + if ((y=c3+(cc3-u20.d*c3))==c3+(cc3+u20.d*c3)) { retval = (-sy*y); goto ret; } }
3239 else {
3240 /* tan */
3241 DIV2(c2,cc2,c1,cc1,c3,cc3,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10)
3242 - if ((y=c3+(cc3-u19.d*c3))==c3+(cc3+u19.d*c3)) return (sy*y); }
3243 - return tanMp(x);
3244 + if ((y=c3+(cc3-u19.d*c3))==c3+(cc3+u19.d*c3)) { retval = (sy*y); goto ret; } }
3245 + retval = tanMp(x);
3246 + goto ret;
3247 }
3248
3249 /* (---) The case 1e8 < abs(x) < 2**1024 */
3250 @@ -381,7 +395,7 @@ double tan(double x) {
3251 else {ya= a; yya= da; sy= ONE;}
3252
3253 /* (+++) The case 1e8 < abs(x) < 2**1024, abs(y) <= 1e-7 */
3254 - if (ya<=gy1.d) return tanMp(x);
3255 + if (ya<=gy1.d) { retval = tanMp(x); goto ret; }
3256
3257 /* (X) The case 1e8 < abs(x) < 2**1024, 1e-7 < abs(y) <= 0.0608 */
3258 if (ya<=gy2.d) {
3259 @@ -391,10 +405,10 @@ double tan(double x) {
3260 /* First stage -cot */
3261 EADD(a,t2,b,db)
3262 DIV2(one.d,zero.d,b,db,c,dc,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10)
3263 - if ((y=c+(dc-u22.d*c))==c+(dc+u22.d*c)) return (-y); }
3264 + if ((y=c+(dc-u22.d*c))==c+(dc+u22.d*c)) { retval = (-y); goto ret; } }
3265 else {
3266 /* First stage tan */
3267 - if ((y=a+(t2-u21.d*a))==a+(t2+u21.d*a)) return y; }
3268 + if ((y=a+(t2-u21.d*a))==a+(t2+u21.d*a)) { retval = y; goto ret; } }
3269
3270 /* Second stage */
3271 /* Reduction by algorithm iv */
3272 @@ -423,11 +437,12 @@ double tan(double x) {
3273 if (n) {
3274 /* Second stage -cot */
3275 DIV2(one.d,zero.d,c1,cc1,c2,cc2,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10)
3276 - if ((y=c2+(cc2-u24.d*c2)) == c2+(cc2+u24.d*c2)) return (-y); }
3277 + if ((y=c2+(cc2-u24.d*c2)) == c2+(cc2+u24.d*c2)) { retval = (-y); goto ret; } }
3278 else {
3279 /* Second stage tan */
3280 - if ((y=c1+(cc1-u23.d*c1)) == c1+(cc1+u23.d*c1)) return y; }
3281 - return tanMp(x);
3282 + if ((y=c1+(cc1-u23.d*c1)) == c1+(cc1+u23.d*c1)) { retval = y; goto ret; } }
3283 + retval = tanMp(x);
3284 + goto ret;
3285 }
3286
3287 /* (XI) The case 1e8 < abs(x) < 2**1024, 0.0608 < abs(y) <= 0.787 */
3288 @@ -440,17 +455,17 @@ double tan(double x) {
3289 if (n) {
3290 /* -cot */
3291 t2 = pz*(fi+gi)/(fi+pz);
3292 - if ((y=gi-(t2-gi*u26.d))==gi-(t2+gi*u26.d)) return (-sy*y);
3293 + if ((y=gi-(t2-gi*u26.d))==gi-(t2+gi*u26.d)) { retval = (-sy*y); goto ret; }
3294 t3 = (t2<ZERO) ? -t2 : t2;
3295 t4 = gi*ua26.d+t3*ub26.d;
3296 - if ((y=gi-(t2-t4))==gi-(t2+t4)) return (-sy*y); }
3297 + if ((y=gi-(t2-t4))==gi-(t2+t4)) { retval = (-sy*y); goto ret; } }
3298 else {
3299 /* tan */
3300 t2 = pz*(gi+fi)/(gi-pz);
3301 - if ((y=fi+(t2-fi*u25.d))==fi+(t2+fi*u25.d)) return (sy*y);
3302 + if ((y=fi+(t2-fi*u25.d))==fi+(t2+fi*u25.d)) { retval = (sy*y); goto ret; }
3303 t3 = (t2<ZERO) ? -t2 : t2;
3304 t4 = fi*ua25.d+t3*ub25.d;
3305 - if ((y=fi+(t2-t4))==fi+(t2+t4)) return (sy*y); }
3306 + if ((y=fi+(t2-t4))==fi+(t2+t4)) { retval = (sy*y); goto ret; } }
3307
3308 /* Second stage */
3309 ffi = xfg[i][3].d;
3310 @@ -471,15 +486,19 @@ double tan(double x) {
3311 if (n) {
3312 /* -cot */
3313 DIV2(c1,cc1,c2,cc2,c3,cc3,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10)
3314 - if ((y=c3+(cc3-u28.d*c3))==c3+(cc3+u28.d*c3)) return (-sy*y); }
3315 + if ((y=c3+(cc3-u28.d*c3))==c3+(cc3+u28.d*c3)) { retval = (-sy*y); goto ret; } }
3316 else {
3317 /* tan */
3318 DIV2(c2,cc2,c1,cc1,c3,cc3,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10)
3319 - if ((y=c3+(cc3-u27.d*c3))==c3+(cc3+u27.d*c3)) return (sy*y); }
3320 - return tanMp(x);
3321 + if ((y=c3+(cc3-u27.d*c3))==c3+(cc3+u27.d*c3)) { retval = (sy*y); goto ret; } }
3322 + retval = tanMp(x);
3323 + goto ret;
3324 +
3325 + ret:
3326 + libc_feupdateenv (&env);
3327 + return retval;
3328 }
3329
3330 -
3331 /* multiple precision stage */
3332 /* Convert x to multi precision number,compute tan(x) by mptan() routine */
3333 /* and converts result back to double */
3334 diff -Nrup a/sysdeps/ieee754/dbl-64/wordsize-64/s_nearbyint.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_nearbyint.c
3335 --- a/sysdeps/ieee754/dbl-64/wordsize-64/s_nearbyint.c 2010-05-04 05:27:23.000000000 -0600
3336 +++ b/sysdeps/ieee754/dbl-64/wordsize-64/s_nearbyint.c 2012-08-06 09:54:00.828929666 -0600
3337 @@ -24,22 +24,14 @@
3338 #include "math.h"
3339 #include "math_private.h"
3340
3341 -#ifdef __STDC__
3342 static const double
3343 -#else
3344 -static double
3345 -#endif
3346 TWO52[2]={
3347 4.50359962737049600000e+15, /* 0x43300000, 0x00000000 */
3348 -4.50359962737049600000e+15, /* 0xC3300000, 0x00000000 */
3349 };
3350
3351 -#ifdef __STDC__
3352 - double __nearbyint(double x)
3353 -#else
3354 - double __nearbyint(x)
3355 - double x;
3356 -#endif
3357 +double
3358 +__nearbyint(double x)
3359 {
3360 fenv_t env;
3361 int64_t i0,sx;
3362 @@ -47,20 +39,19 @@ TWO52[2]={
3363 EXTRACT_WORDS64(i0,x);
3364 sx = (i0>>63)&1;
3365 j0 = ((i0>>52)&0x7ff)-0x3ff;
3366 - if(j0<52) {
3367 + if(__builtin_expect(j0<52, 1)) {
3368 if(j0<0) {
3369 if((i0&UINT64_C(0x7fffffffffffffff))==0) return x;
3370 uint64_t i = i0 & UINT64_C(0xfffffffffffff);
3371 i0 &= UINT64_C(0xfffe000000000000);
3372 i0 |= (((i|-i) >> 12) & UINT64_C(0x8000000000000));
3373 INSERT_WORDS64(x,i0);
3374 - feholdexcept (&env);
3375 + libc_feholdexcept (&env);
3376 double w = TWO52[sx]+x;
3377 double t = w-TWO52[sx];
3378 - fesetenv (&env);
3379 - EXTRACT_WORDS64(i0,t);
3380 - INSERT_WORDS64(t,(i0&UINT64_C(0x7fffffffffffffff))|(sx<<63));
3381 - return t;
3382 + math_opt_barrier(t);
3383 + libc_fesetenv (&env);
3384 + return copysign(t, x);
3385 } else {
3386 uint64_t i = UINT64_C(0x000fffffffffffff)>>j0;
3387 if((i0&i)==0) return x; /* x is integral */
3388 @@ -73,10 +64,11 @@ TWO52[2]={
3389 else return x; /* x is integral */
3390 }
3391 INSERT_WORDS64(x,i0);
3392 - feholdexcept (&env);
3393 + libc_feholdexcept (&env);
3394 double w = TWO52[sx]+x;
3395 double t = w-TWO52[sx];
3396 - fesetenv (&env);
3397 + math_opt_barrier (t);
3398 + libc_fesetenv (&env);
3399 return t;
3400 }
3401 weak_alias (__nearbyint, nearbyint)
3402 diff -Nrup a/sysdeps/ieee754/flt-32/e_exp2f.c b/sysdeps/ieee754/flt-32/e_exp2f.c
3403 --- a/sysdeps/ieee754/flt-32/e_exp2f.c 2010-05-04 05:27:23.000000000 -0600
3404 +++ b/sysdeps/ieee754/flt-32/e_exp2f.c 2012-08-06 09:54:00.829929661 -0600
3405 @@ -56,11 +56,7 @@ __ieee754_exp2f (float x)
3406 union ieee754_float ex2_u, scale_u;
3407 fenv_t oldenv;
3408
3409 - feholdexcept (&oldenv);
3410 -#ifdef FE_TONEAREST
3411 - /* If we don't have this, it's too bad. */
3412 - fesetround (FE_TONEAREST);
3413 -#endif
3414 + libc_feholdexcept_setroundf (&oldenv, FE_TONEAREST);
3415
3416 /* 1. Argument reduction.
3417 Choose integers ex, -128 <= t < 128, and some real
3418 @@ -103,7 +99,7 @@ __ieee754_exp2f (float x)
3419 x22 = (.24022656679f * x + .69314736128f) * ex2_u.f;
3420
3421 /* 5. Return (2^x2-1) * 2^(t/512+e+ex) + 2^(t/512+e+ex). */
3422 - fesetenv (&oldenv);
3423 + libc_fesetenv (&oldenv);
3424
3425 result = x22 * x + ex2_u.f;
3426
3427 diff -Nrup a/sysdeps/ieee754/flt-32/e_expf.c b/sysdeps/ieee754/flt-32/e_expf.c
3428 --- a/sysdeps/ieee754/flt-32/e_expf.c 2010-05-04 05:27:23.000000000 -0600
3429 +++ b/sysdeps/ieee754/flt-32/e_expf.c 2012-08-06 09:54:00.829929661 -0600
3430 @@ -47,9 +47,6 @@
3431 to perform an 'accurate table method' expf, because of the range reduction
3432 overhead (compare exp2f).
3433 */
3434 -#ifndef _GNU_SOURCE
3435 -#define _GNU_SOURCE
3436 -#endif
3437 #include <float.h>
3438 #include <ieee754.h>
3439 #include <math.h>
3440 @@ -60,8 +57,8 @@
3441 extern const float __exp_deltatable[178];
3442 extern const double __exp_atable[355] /* __attribute__((mode(DF))) */;
3443
3444 -static const volatile float TWOM100 = 7.88860905e-31;
3445 -static const volatile float TWO127 = 1.7014118346e+38;
3446 +static const float TWOM100 = 7.88860905e-31;
3447 +static const float TWO127 = 1.7014118346e+38;
3448
3449 float
3450 __ieee754_expf (float x)
3451 @@ -86,10 +83,7 @@ __ieee754_expf (float x)
3452 union ieee754_double ex2_u;
3453 fenv_t oldenv;
3454
3455 - feholdexcept (&oldenv);
3456 -#ifdef FE_TONEAREST
3457 - fesetround (FE_TONEAREST);
3458 -#endif
3459 + libc_feholdexcept_setroundf (&oldenv, FE_TONEAREST);
3460
3461 /* Calculate n. */
3462 n = x * M_1_LN2 + THREEp22;
3463 @@ -119,7 +113,7 @@ __ieee754_expf (float x)
3464 x22 = (0.5000000496709180453 * dx + 1.0000001192102037084) * dx + delta;
3465
3466 /* Return result. */
3467 - fesetenv (&oldenv);
3468 + libc_fesetenvf (&oldenv);
3469
3470 result = x22 * ex2_u.d + ex2_u.d;
3471 return (float) result;
3472 diff -Nrup a/sysdeps/ieee754/flt-32/s_nearbyintf.c b/sysdeps/ieee754/flt-32/s_nearbyintf.c
3473 --- a/sysdeps/ieee754/flt-32/s_nearbyintf.c 2010-05-04 05:27:23.000000000 -0600
3474 +++ b/sysdeps/ieee754/flt-32/s_nearbyintf.c 2012-08-06 09:54:00.891929402 -0600
3475 @@ -19,22 +19,14 @@
3476 #include "math.h"
3477 #include "math_private.h"
3478
3479 -#ifdef __STDC__
3480 static const float
3481 -#else
3482 -static float
3483 -#endif
3484 TWO23[2]={
3485 8.3886080000e+06, /* 0x4b000000 */
3486 -8.3886080000e+06, /* 0xcb000000 */
3487 };
3488
3489 -#ifdef __STDC__
3490 - float __nearbyintf(float x)
3491 -#else
3492 - float __nearbyintf(x)
3493 - float x;
3494 -#endif
3495 +float
3496 +__nearbyintf(float x)
3497 {
3498 fenv_t env;
3499 int32_t i0,j0,sx;
3500 @@ -50,13 +42,13 @@ TWO23[2]={
3501 i0 &= 0xfff00000;
3502 i0 |= ((i1|-i1)>>9)&0x400000;
3503 SET_FLOAT_WORD(x,i0);
3504 - feholdexcept (&env);
3505 - w = TWO23[sx]+x;
3506 - t = w-TWO23[sx];
3507 - fesetenv (&env);
3508 + libc_feholdexceptf (&env);
3509 + w = TWO23[sx]+x;
3510 + t = w-TWO23[sx];
3511 + libc_fesetenvf (&env);
3512 GET_FLOAT_WORD(i0,t);
3513 SET_FLOAT_WORD(t,(i0&0x7fffffff)|(sx<<31));
3514 - return t;
3515 + return t;
3516 } else {
3517 i = (0x007fffff)>>j0;
3518 if((i0&i)==0) return x; /* x is integral */
3519 @@ -64,14 +56,14 @@ TWO23[2]={
3520 if((i0&i)!=0) i0 = (i0&(~i))|((0x100000)>>j0);
3521 }
3522 } else {
3523 - if(j0==0x80) return x+x; /* inf or NaN */
3524 + if(__builtin_expect(j0==0x80, 0)) return x+x; /* inf or NaN */
3525 else return x; /* x is integral */
3526 }
3527 SET_FLOAT_WORD(x,i0);
3528 - feholdexcept (&env);
3529 + libc_feholdexceptf (&env);
3530 w = TWO23[sx]+x;
3531 t = w-TWO23[sx];
3532 - fesetenv (&env);
3533 + libc_fesetenvf (&env);
3534 return t;
3535 }
3536 weak_alias (__nearbyintf, nearbyintf)
3537 diff -Nrup a/sysdeps/powerpc/fpu/libm-test-ulps b/sysdeps/powerpc/fpu/libm-test-ulps
3538 --- a/sysdeps/powerpc/fpu/libm-test-ulps 2010-05-04 05:27:23.000000000 -0600
3539 +++ b/sysdeps/powerpc/fpu/libm-test-ulps 2012-08-06 10:03:24.424569052 -0600
3540 @@ -37,16 +37,9 @@ ildouble: 1
3541 ldouble: 1
3542
3543 # cacosh
3544 -Test "Real part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
3545 -double: 1
3546 -float: 7
3547 -idouble: 1
3548 -ifloat: 7
3549 Test "Imaginary part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
3550 -double: 1
3551 -float: 3
3552 -idouble: 1
3553 -ifloat: 3
3554 +float: 1
3555 +ifloat: 1
3556
3557 # casin
3558 Test "Real part of: casin (-2 - 3 i) == -0.57065278432109940071028387968566963 - 1.9833870299165354323470769028940395 i":
3559 @@ -84,8 +77,6 @@ ifloat: 1
3560
3561 # catan
3562 Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i":
3563 -float: 3
3564 -ifloat: 3
3565 ildouble: 1
3566 ldouble: 1
3567 Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i":
3568 @@ -93,23 +84,14 @@ double: 1
3569 float: 1
3570 idouble: 1
3571 ifloat: 1
3572 -Test "Real part of: catan (0.75 + 1.25 i) == 1.10714871779409050301706546017853704 + 0.549306144334054845697622618461262852 i":
3573 -float: 4
3574 -ifloat: 4
3575
3576 # catanh
3577 Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i":
3578 double: 4
3579 idouble: 4
3580 -Test "Imaginary part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i":
3581 -float: 4
3582 -ifloat: 4
3583 Test "Real part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i":
3584 double: 1
3585 idouble: 1
3586 -Test "Imaginary part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i":
3587 -float: 6
3588 -ifloat: 6
3589
3590 # cbrt
3591 Test "cbrt (-27.0) == -3.0":
3592 @@ -167,8 +149,6 @@ ldouble: 1
3593
3594 # clog
3595 Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680267437207826593 - 2.1587989303424641704769327722648368 i":
3596 -float: 3
3597 -ifloat: 3
3598 ildouble: 1
3599 ldouble: 1
3600 Test "Real part of: clog (0.75 + 1.25 i) == 0.376885901188190075998919126749298416 + 1.03037682652431246378774332703115153 i":
3601 @@ -197,9 +177,7 @@ ildouble: 1
3602 ldouble: 1
3603 Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
3604 double: 1
3605 -float: 5
3606 idouble: 1
3607 -ifloat: 5
3608 ildouble: 1
3609 ldouble: 1
3610 Test "Imaginary part of: clog10 (-3 + inf i) == inf + pi/2*log10(e) i":
3611 @@ -298,23 +276,165 @@ ldouble: 1
3612 # cos
3613 Test "cos (M_PI_6l * 2.0) == 0.5":
3614 double: 1
3615 -float: 1
3616 idouble: 1
3617 -ifloat: 1
3618 Test "cos (M_PI_6l * 4.0) == -0.5":
3619 double: 2
3620 float: 1
3621 idouble: 2
3622 ifloat: 1
3623 -Test "cos (pi/2) == 0":
3624 -double: 1
3625 +
3626 +# cos_downward
3627 +Test "cos_downward (1) == 0.5403023058681397174009366074429766037323":
3628 +float: 1
3629 +ifloat: 1
3630 +ildouble: 4
3631 +ldouble: 4
3632 +Test "cos_downward (10) == -0.8390715290764524522588639478240648345199":
3633 +ildouble: 1
3634 +ldouble: 1
3635 +Test "cos_downward (2) == -0.4161468365471423869975682295007621897660":
3636 +float: 1
3637 +ifloat: 1
3638 +Test "cos_downward (3) == -0.9899924966004454572715727947312613023937":
3639 +float: 1
3640 +ifloat: 1
3641 +Test "cos_downward (4) == -0.6536436208636119146391681830977503814241":
3642 +float: 1
3643 +ifloat: 1
3644 +Test "cos_downward (5) == 0.2836621854632262644666391715135573083344":
3645 +float: 1
3646 +ifloat: 1
3647 +Test "cos_downward (6) == 0.9601702866503660205456522979229244054519":
3648 +ildouble: 1
3649 +ldouble: 1
3650 +Test "cos_downward (7) == 0.7539022543433046381411975217191820122183":
3651 +float: 1
3652 +ifloat: 1
3653 +Test "cos_downward (8) == -0.1455000338086135258688413818311946826093":
3654 +float: 1
3655 +ifloat: 1
3656 +ildouble: 2
3657 +ldouble: 2
3658 +Test "cos_downward (9) == -0.9111302618846769883682947111811653112463":
3659 +ildouble: 1
3660 +ldouble: 1
3661 +
3662 +# cos_tonearest
3663 +Test "cos_tonearest (7) == 0.7539022543433046381411975217191820122183":
3664 +float: 1
3665 +ifloat: 1
3666 +
3667 +# cos_towardzero
3668 +Test "cos_towardzero (1) == 0.5403023058681397174009366074429766037323":
3669 +ildouble: 2
3670 +ldouble: 2
3671 +Test "cos_towardzero (10) == -0.8390715290764524522588639478240648345199":
3672 +ildouble: 1
3673 +ldouble: 1
3674 +Test "cos_towardzero (2) == -0.4161468365471423869975682295007621897660":
3675 +float: 1
3676 +ifloat: 1
3677 +Test "cos_towardzero (3) == -0.9899924966004454572715727947312613023937":
3678 +float: 1
3679 +ifloat: 1
3680 +Test "cos_towardzero (4) == -0.6536436208636119146391681830977503814241":
3681 +ildouble: 1
3682 +ldouble: 1
3683 +Test "cos_towardzero (5) == 0.2836621854632262644666391715135573083344":
3684 +float: 1
3685 +ifloat: 1
3686 +Test "cos_towardzero (7) == 0.7539022543433046381411975217191820122183":
3687 +float: 1
3688 +ifloat: 1
3689 +Test "cos_towardzero (8) == -0.1455000338086135258688413818311946826093":
3690 float: 1
3691 -idouble: 1
3692 ifloat: 1
3693 -Test "cos (16.0) == -0.9576594803233846418996372326511034717803"
3694 ildouble: 2
3695 ldouble: 2
3696
3697 +# cos_upward
3698 +Test "cos_upward (1) == 0.5403023058681397174009366074429766037323":
3699 +ildouble: 2
3700 +ldouble: 2
3701 +Test "cos_upward (10) == -0.8390715290764524522588639478240648345199":
3702 +float: 1
3703 +ifloat: 1
3704 +ildouble: 1
3705 +ldouble: 1
3706 +Test "cos_upward (4) == -0.6536436208636119146391681830977503814241":
3707 +ildouble: 1
3708 +ldouble: 1
3709 +Test "cos_upward (5) == 0.2836621854632262644666391715135573083344":
3710 +ildouble: 1
3711 +ldouble: 1
3712 +Test "cos_upward (6) == 0.9601702866503660205456522979229244054519":
3713 +float: 1
3714 +ifloat: 1
3715 +Test "cos_upward (7) == 0.7539022543433046381411975217191820122183":
3716 +float: 1
3717 +ifloat: 1
3718 +ildouble: 1
3719 +ldouble: 1
3720 +Test "cos_upward (9) == -0.9111302618846769883682947111811653112463":
3721 +float: 2
3722 +ifloat: 2
3723 +
3724 +# cosh_downward
3725 +Test "cosh_downward (22) == 1792456423.065795780980053377632656584997":
3726 +float: 1
3727 +ifloat: 1
3728 +ildouble: 5269156250720
3729 +ldouble: 5269156250720
3730 +Test "cosh_downward (23) == 4872401723.124451300068625740569997090344":
3731 +float: 1
3732 +ifloat: 1
3733 +ildouble: 484603564240
3734 +ldouble: 484603564240
3735 +Test "cosh_downward (24) == 13244561064.92173614708845674912733665919":
3736 +float: 1
3737 +ifloat: 1
3738 +ildouble: 89137844202
3739 +ldouble: 89137844202
3740 +
3741 +# cosh_tonearest
3742 +Test "cosh_tonearest (22) == 1792456423.065795780980053377632656584997":
3743 +ildouble: 5269156250719
3744 +ldouble: 5269156250719
3745 +Test "cosh_tonearest (23) == 4872401723.124451300068625740569997090344":
3746 +ildouble: 484603564240
3747 +ldouble: 484603564240
3748 +Test "cosh_tonearest (24) == 13244561064.92173614708845674912733665919":
3749 +ildouble: 89137844202
3750 +ldouble: 89137844202
3751 +
3752 +# cosh_towardzero
3753 +Test "cosh_towardzero (22) == 1792456423.065795780980053377632656584997":
3754 +float: 1
3755 +ifloat: 1
3756 +ildouble: 5269156250720
3757 +ldouble: 5269156250720
3758 +Test "cosh_towardzero (23) == 4872401723.124451300068625740569997090344":
3759 +float: 1
3760 +ifloat: 1
3761 +ildouble: 484603564240
3762 +ldouble: 484603564240
3763 +Test "cosh_towardzero (24) == 13244561064.92173614708845674912733665919":
3764 +float: 1
3765 +ifloat: 1
3766 +ildouble: 89137844202
3767 +ldouble: 89137844202
3768 +
3769 +# cosh_upward
3770 +Test "cosh_upward (22) == 1792456423.065795780980053377632656584997":
3771 +ildouble: 5269156250719
3772 +ldouble: 5269156250719
3773 +Test "cosh_upward (23) == 4872401723.124451300068625740569997090344":
3774 +ildouble: 484603564240
3775 +ldouble: 484603564240
3776 +Test "cosh_upward (24) == 13244561064.92173614708845674912733665919":
3777 +ildouble: 89137844200
3778 +ldouble: 89137844200
3779 +
3780 # cpow
3781 Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
3782 float: 1
3783 @@ -386,12 +506,6 @@ float: 1
3784 ifloat: 1
3785
3786 # ctan
3787 -Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
3788 -double: 1
3789 -idouble: 1
3790 -Test "Imaginary part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
3791 -ildouble: 1
3792 -ldouble: 1
3793 Test "Imaginary part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i":
3794 double: 1
3795 idouble: 1
3796 @@ -463,6 +577,33 @@ Test "exp2 (10) == 1024":
3797 ildouble: 2
3798 ldouble: 2
3799
3800 +# exp_downward
3801 +Test "exp_downward (2) == e^2":
3802 +float: 1
3803 +ifloat: 1
3804 +Test "exp_downward (3) == e^3":
3805 +float: 1
3806 +ifloat: 1
3807 +ildouble: 1
3808 +ldouble: 1
3809 +
3810 +# exp_towardzero
3811 +Test "exp_towardzero (2) == e^2":
3812 +float: 1
3813 +ifloat: 1
3814 +Test "exp_towardzero (3) == e^3":
3815 +float: 1
3816 +ifloat: 1
3817 +ildouble: 1
3818 +ldouble: 1
3819 +
3820 +# exp_upward
3821 +Test "exp_upward (1) == e":
3822 +float: 1
3823 +ifloat: 1
3824 +ildouble: 1
3825 +ldouble: 1
3826 +
3827 # expm1
3828 Test "expm1 (0.75) == 1.11700001661267466854536981983709561":
3829 double: 1
3830 @@ -505,40 +646,27 @@ ifloat: 1
3831 # j0
3832 Test "j0 (-4.0) == -3.9714980986384737228659076845169804197562E-1":
3833 double: 1
3834 -float: 2
3835 +float: 1
3836 idouble: 1
3837 -ifloat: 2
3838 -ildouble: 1
3839 -ldouble: 1
3840 +ifloat: 1
3841 Test "j0 (10.0) == -0.245935764451348335197760862485328754":
3842 -double: 3
3843 +double: 2
3844 float: 1
3845 -idouble: 3
3846 +idouble: 2
3847 ifloat: 1
3848 -ildouble: 1
3849 -ldouble: 1
3850 -Test "j0 (2.0) == 0.223890779141235668051827454649948626":
3851 -float: 2
3852 -ifloat: 2
3853 Test "j0 (4.0) == -3.9714980986384737228659076845169804197562E-1":
3854 double: 1
3855 -float: 2
3856 +float: 1
3857 idouble: 1
3858 -ifloat: 2
3859 -ildouble: 1
3860 -ldouble: 1
3861 +ifloat: 1
3862 Test "j0 (8.0) == 0.171650807137553906090869407851972001":
3863 float: 1
3864 ifloat: 1
3865 -ildouble: 1
3866 -ldouble: 1
3867
3868 # j1
3869 Test "j1 (10.0) == 0.0434727461688614366697487680258592883":
3870 float: 2
3871 ifloat: 2
3872 -ildouble: 1
3873 -ldouble: 1
3874 Test "j1 (2.0) == 0.576724807756873387202448242269137087":
3875 double: 1
3876 idouble: 1
3877 @@ -551,38 +679,25 @@ ldouble: 1
3878 # jn
3879 Test "jn (0, -4.0) == -3.9714980986384737228659076845169804197562E-1":
3880 double: 1
3881 -float: 2
3882 +float: 1
3883 idouble: 1
3884 -ifloat: 2
3885 -ildouble: 1
3886 -ldouble: 1
3887 +ifloat: 1
3888 Test "jn (0, 10.0) == -0.245935764451348335197760862485328754":
3889 -double: 3
3890 +double: 2
3891 float: 1
3892 -idouble: 3
3893 +idouble: 2
3894 ifloat: 1
3895 -ildouble: 1
3896 -ldouble: 1
3897 -Test "jn (0, 2.0) == 0.223890779141235668051827454649948626":
3898 -float: 2
3899 -ifloat: 2
3900 Test "jn (0, 4.0) == -3.9714980986384737228659076845169804197562E-1":
3901 double: 1
3902 -float: 2
3903 +float: 1
3904 idouble: 1
3905 -ifloat: 2
3906 -ildouble: 1
3907 -ldouble: 1
3908 +ifloat: 1
3909 Test "jn (0, 8.0) == 0.171650807137553906090869407851972001":
3910 float: 1
3911 ifloat: 1
3912 -ildouble: 1
3913 -ldouble: 1
3914 Test "jn (1, 10.0) == 0.0434727461688614366697487680258592883":
3915 float: 2
3916 ifloat: 2
3917 -ildouble: 1
3918 -ldouble: 1
3919 Test "jn (1, 2.0) == 0.576724807756873387202448242269137087":
3920 double: 1
3921 idouble: 1
3922 @@ -615,11 +730,8 @@ ifloat: 1
3923 ildouble: 4
3924 ldouble: 4
3925 Test "jn (10, 2.0) == 0.251538628271673670963516093751820639e-6":
3926 -float: 4
3927 -ifloat: 4
3928 -Test "jn (3, -1.0) == -0.0195633539826684059189053216217515083":
3929 -ildouble: 1
3930 -ldouble: 1
3931 +float: 3
3932 +ifloat: 3
3933 Test "jn (3, 0.125) == 0.406503832554912875023029337653442868e-4":
3934 double: 1
3935 float: 1
3936 @@ -628,21 +740,18 @@ ifloat: 1
3937 Test "jn (3, 0.75) == 0.848438342327410884392755236884386804e-2":
3938 double: 1
3939 idouble: 1
3940 -Test "jn (3, 1.0) == 0.0195633539826684059189053216217515083":
3941 -ildouble: 1
3942 -ldouble: 1
3943 Test "jn (3, 10.0) == 0.0583793793051868123429354784103409563":
3944 double: 3
3945 -float: 2
3946 +float: 1
3947 idouble: 3
3948 -ifloat: 2
3949 +ifloat: 1
3950 ildouble: 2
3951 ldouble: 2
3952 Test "jn (3, 2.0) == 0.128943249474402051098793332969239835":
3953 double: 1
3954 -float: 2
3955 +float: 1
3956 idouble: 1
3957 -ifloat: 2
3958 +ifloat: 1
3959 ildouble: 2
3960 ldouble: 2
3961
3962 @@ -675,115 +784,350 @@ Test "log1p (-0.25) == -0.28768207245178
3963 float: 1
3964 ifloat: 1
3965
3966 -# log2
3967 -Test "log2 (e) == M_LOG2El":
3968 +# pow_downward
3969 +Test "pow_downward (1.0625, 1.125) == 1.070582293028761362162622578677070098674":
3970 ildouble: 1
3971 ldouble: 1
3972 -
3973 -# sin
3974 -Test "sin (16.0) == -0.2879033166650652947844562482186175296207"
3975 -ildouble: 2
3976 -ldouble: 2
3977 -
3978 -# sincos
3979 -Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
3980 -double: 1
3981 -float: 1
3982 -idouble: 1
3983 -ifloat: 1
3984 -Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res":
3985 -double: 1
3986 +Test "pow_downward (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
3987 float: 1
3988 -idouble: 1
3989 ifloat: 1
3990 -Test "sincos (pi/2, &sin_res, &cos_res) puts 0 in cos_res":
3991 -double: 1
3992 +
3993 +# pow_towardzero
3994 +Test "pow_towardzero (1.0625, 1.125) == 1.070582293028761362162622578677070098674":
3995 +ildouble: 1
3996 +ldouble: 1
3997 +Test "pow_towardzero (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
3998 float: 1
3999 -idouble: 1
4000 ifloat: 1
4001 -Test "sincos (pi/6, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in cos_res":
4002 +
4003 +# pow_upward
4004 +Test "pow_upward (1.0625, 1.125) == 1.070582293028761362162622578677070098674":
4005 float: 1
4006 ifloat: 1
4007 -
4008 -# sinh
4009 -Test "sinh (0.75) == 0.822316731935829980703661634446913849":
4010 +Test "pow_upward (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
4011 ildouble: 1
4012 ldouble: 1
4013
4014 -# tan
4015 -Test "tan (pi/4) == 1":
4016 -double: 1
4017 -idouble: 1
4018 +# sin_downward
4019 +Test "sin_downward (1) == 0.8414709848078965066525023216302989996226":
4020 +ildouble: 4
4021 +ldouble: 4
4022 +Test "sin_downward (10) == -0.5440211108893698134047476618513772816836":
4023 +float: 1
4024 +ifloat: 1
4025 +Test "sin_downward (2) == 0.9092974268256816953960198659117448427023":
4026 ildouble: 1
4027 ldouble: 1
4028 -
4029 -# tanh
4030 -Test "tanh (-0.75) == -0.635148952387287319214434357312496495":
4031 +Test "sin_downward (3) == 0.1411200080598672221007448028081102798469":
4032 +float: 1
4033 +ifloat: 1
4034 +ildouble: 2
4035 +ldouble: 2
4036 +Test "sin_downward (4) == -0.7568024953079282513726390945118290941359":
4037 ildouble: 1
4038 ldouble: 1
4039 -Test "tanh (0.75) == 0.635148952387287319214434357312496495":
4040 +Test "sin_downward (5) == -0.9589242746631384688931544061559939733525":
4041 +float: 1
4042 +ifloat: 1
4043 +Test "sin_downward (6) == -0.2794154981989258728115554466118947596280":
4044 +float: 1
4045 +ifloat: 1
4046 +ildouble: 2
4047 +ldouble: 2
4048 +Test "sin_downward (8) == 0.9893582466233817778081235982452886721164":
4049 ildouble: 1
4050 ldouble: 1
4051
4052 -# tgamma
4053 -Test "tgamma (-0.5) == -2 sqrt (pi)":
4054 -double: 1
4055 +# sin_tonearest
4056 +Test "sin_tonearest (1) == 0.8414709848078965066525023216302989996226":
4057 float: 1
4058 -idouble: 1
4059 ifloat: 1
4060 -Test "tgamma (0.5) == sqrt (pi)":
4061 +
4062 +# sin_towardzero
4063 +Test "sin_towardzero (1) == 0.8414709848078965066525023216302989996226":
4064 float: 1
4065 ifloat: 1
4066 -Test "tgamma (0.7) == 1.29805533264755778568117117915281162":
4067 -double: 1
4068 +ildouble: 2
4069 +ldouble: 2
4070 +Test "sin_towardzero (10) == -0.5440211108893698134047476618513772816836":
4071 float: 1
4072 -idouble: 1
4073 ifloat: 1
4074 -
4075 -# y0
4076 -Test "y0 (0.125) == -1.38968062514384052915582277745018693":
4077 +Test "sin_towardzero (2) == 0.9092974268256816953960198659117448427023":
4078 ildouble: 1
4079 ldouble: 1
4080 -Test "y0 (0.75) == -0.137172769385772397522814379396581855":
4081 +Test "sin_towardzero (3) == 0.1411200080598672221007448028081102798469":
4082 ildouble: 1
4083 ldouble: 1
4084 -Test "y0 (1.0) == 0.0882569642156769579829267660235151628":
4085 -double: 2
4086 +Test "sin_towardzero (4) == -0.7568024953079282513726390945118290941359":
4087 +float: 1
4088 +ifloat: 1
4089 +Test "sin_towardzero (5) == -0.9589242746631384688931544061559939733525":
4090 float: 1
4091 -idouble: 2
4092 ifloat: 1
4093 +Test "sin_towardzero (8) == 0.9893582466233817778081235982452886721164":
4094 ildouble: 1
4095 ldouble: 1
4096 -Test "y0 (1.5) == 0.382448923797758843955068554978089862":
4097 -double: 2
4098 +Test "sin_towardzero (9) == 0.4121184852417565697562725663524351793439":
4099 float: 1
4100 -idouble: 2
4101 ifloat: 1
4102 -Test "y0 (10.0) == 0.0556711672835993914244598774101900481":
4103 +ildouble: 1
4104 +ldouble: 1
4105 +
4106 +# sin_upward
4107 +Test "sin_upward (1) == 0.8414709848078965066525023216302989996226":
4108 +float: 1
4109 +ifloat: 1
4110 +ildouble: 2
4111 +ldouble: 2
4112 +Test "sin_upward (2) == 0.9092974268256816953960198659117448427023":
4113 +float: 2
4114 +ifloat: 2
4115 +Test "sin_upward (3) == 0.1411200080598672221007448028081102798469":
4116 +ildouble: 1
4117 +ldouble: 1
4118 +Test "sin_upward (4) == -0.7568024953079282513726390945118290941359":
4119 +float: 1
4120 +ifloat: 1
4121 +ildouble: 1
4122 +ldouble: 1
4123 +Test "sin_upward (6) == -0.2794154981989258728115554466118947596280":
4124 +ildouble: 1
4125 +ldouble: 1
4126 +Test "sin_upward (9) == 0.4121184852417565697562725663524351793439":
4127 +float: 1
4128 +ifloat: 1
4129 +
4130 +# sincos
4131 +Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
4132 +double: 1
4133 +idouble: 1
4134 +Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res":
4135 double: 1
4136 float: 1
4137 idouble: 1
4138 ifloat: 1
4139 +Test "sincos (pi/6, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in cos_res":
4140 +float: 1
4141 +ifloat: 1
4142 +
4143 +# sinh
4144 +Test "sinh (0.75) == 0.822316731935829980703661634446913849":
4145 ildouble: 1
4146 ldouble: 1
4147 -Test "y0 (2.0) == 0.510375672649745119596606592727157873":
4148 +
4149 +# sinh_downward
4150 +Test "sinh_downward (22) == 1792456423.065795780701106568345764104225":
4151 +float: 1
4152 +ifloat: 1
4153 +ildouble: 5269156250718
4154 +ldouble: 5269156250718
4155 +Test "sinh_downward (23) == 4872401723.124451299966006944252978187305":
4156 +float: 1
4157 +ifloat: 1
4158 +ildouble: 484603564240
4159 +ldouble: 484603564240
4160 +Test "sinh_downward (24) == 13244561064.92173614705070540368454568168":
4161 +float: 1
4162 +ifloat: 1
4163 +ildouble: 89137844201
4164 +ldouble: 89137844201
4165 +
4166 +# sinh_tonearest
4167 +Test "sinh_tonearest (22) == 1792456423.065795780701106568345764104225":
4168 +ildouble: 5269156250719
4169 +ldouble: 5269156250719
4170 +Test "sinh_tonearest (23) == 4872401723.124451299966006944252978187305":
4171 +ildouble: 484603564241
4172 +ldouble: 484603564241
4173 +Test "sinh_tonearest (24) == 13244561064.92173614705070540368454568168":
4174 +ildouble: 89137844201
4175 +ldouble: 89137844201
4176 +
4177 +# sinh_towardzero
4178 +Test "sinh_towardzero (22) == 1792456423.065795780701106568345764104225":
4179 +float: 1
4180 +ifloat: 1
4181 +ildouble: 5269156250718
4182 +ldouble: 5269156250718
4183 +Test "sinh_towardzero (23) == 4872401723.124451299966006944252978187305":
4184 +float: 1
4185 +ifloat: 1
4186 +ildouble: 484603564240
4187 +ldouble: 484603564240
4188 +Test "sinh_towardzero (24) == 13244561064.92173614705070540368454568168":
4189 +float: 1
4190 +ifloat: 1
4191 +ildouble: 89137844201
4192 +ldouble: 89137844201
4193 +
4194 +# sinh_upward
4195 +Test "sinh_upward (22) == 1792456423.065795780701106568345764104225":
4196 +ildouble: 5269156250719
4197 +ldouble: 5269156250719
4198 +Test "sinh_upward (23) == 4872401723.124451299966006944252978187305":
4199 +ildouble: 484603564241
4200 +ldouble: 484603564241
4201 +Test "sinh_upward (24) == 13244561064.92173614705070540368454568168":
4202 +ildouble: 89137844202
4203 +ldouble: 89137844202
4204 +
4205 +# tan
4206 +Test "tan (pi/4) == 1":
4207 +ildouble: 1
4208 +ldouble: 1
4209 +
4210 +# tan_downward
4211 +Test "tan_downward (1) == 1.5574077246549022305069748074583601730873":
4212 +float: 1
4213 +ifloat: 1
4214 +ildouble: 2
4215 +ldouble: 2
4216 +Test "tan_downward (10) == 0.6483608274590866712591249330098086768169":
4217 +float: 1
4218 +ifloat: 1
4219 +ildouble: 2
4220 +ldouble: 2
4221 +Test "tan_downward (2) == -2.1850398632615189916433061023136825434320":
4222 +float: 1
4223 +ifloat: 1
4224 +ildouble: 1
4225 +ldouble: 1
4226 +Test "tan_downward (6) == -0.2910061913847491570536995888681755428312":
4227 +float: 1
4228 +ifloat: 1
4229 +ildouble: 1
4230 +ldouble: 1
4231 +Test "tan_downward (8) == -6.7997114552203786999252627596086333648814":
4232 +float: 1
4233 +ifloat: 1
4234 +Test "tan_downward (9) == -0.4523156594418098405903708757987855343087":
4235 +float: 1
4236 +ifloat: 1
4237 +ildouble: 1
4238 +ldouble: 1
4239 +
4240 +# tan_tonearest
4241 +Test "tan_tonearest (10) == 0.6483608274590866712591249330098086768169":
4242 +ildouble: 1
4243 +ldouble: 1
4244 +Test "tan_tonearest (4) == 1.1578212823495775831373424182673239231198":
4245 +ildouble: 1
4246 +ldouble: 1
4247 +Test "tan_tonearest (7) == 0.8714479827243187364564508896003135663222":
4248 +ildouble: 1
4249 +ldouble: 1
4250 +
4251 +# tan_towardzero
4252 +Test "tan_towardzero (10) == 0.6483608274590866712591249330098086768169":
4253 +float: 1
4254 +ifloat: 1
4255 +ildouble: 2
4256 +ldouble: 2
4257 +Test "tan_towardzero (3) == -0.1425465430742778052956354105339134932261":
4258 +float: 1
4259 +ifloat: 1
4260 +ildouble: 3
4261 +ldouble: 3
4262 +Test "tan_towardzero (4) == 1.1578212823495775831373424182673239231198":
4263 +float: 1
4264 +ifloat: 1
4265 +ildouble: 1
4266 +ldouble: 1
4267 +Test "tan_towardzero (5) == -3.3805150062465856369827058794473439087096":
4268 +float: 1
4269 +ifloat: 1
4270 +Test "tan_towardzero (6) == -0.2910061913847491570536995888681755428312":
4271 +ildouble: 1
4272 +ldouble: 1
4273 +Test "tan_towardzero (7) == 0.8714479827243187364564508896003135663222":
4274 +ildouble: 2
4275 +ldouble: 2
4276 +Test "tan_towardzero (9) == -0.4523156594418098405903708757987855343087":
4277 +float: 1
4278 +ifloat: 1
4279 +ildouble: 1
4280 +ldouble: 1
4281 +
4282 +# tan_upward
4283 +Test "tan_upward (10) == 0.6483608274590866712591249330098086768169":
4284 +ildouble: 1
4285 +ldouble: 1
4286 +Test "tan_upward (3) == -0.1425465430742778052956354105339134932261":
4287 +float: 1
4288 +ifloat: 1
4289 +ildouble: 3
4290 +ldouble: 3
4291 +Test "tan_upward (5) == -3.3805150062465856369827058794473439087096":
4292 +float: 1
4293 +ifloat: 1
4294 +ildouble: 1
4295 +ldouble: 1
4296 +Test "tan_upward (6) == -0.2910061913847491570536995888681755428312":
4297 +ildouble: 1
4298 +ldouble: 1
4299 +Test "tan_upward (7) == 0.8714479827243187364564508896003135663222":
4300 +ildouble: 1
4301 +ldouble: 1
4302 +Test "tan_upward (9) == -0.4523156594418098405903708757987855343087":
4303 +ildouble: 1
4304 +ldouble: 1
4305 +
4306 +# tanh
4307 +Test "tanh (-0.75) == -0.635148952387287319214434357312496495":
4308 +ildouble: 1
4309 +ldouble: 1
4310 +Test "tanh (0.75) == 0.635148952387287319214434357312496495":
4311 +ildouble: 1
4312 +ldouble: 1
4313 +
4314 +# tgamma
4315 +Test "tgamma (-0.5) == -2 sqrt (pi)":
4316 double: 1
4317 +float: 1
4318 idouble: 1
4319 -Test "y0 (8.0) == 0.223521489387566220527323400498620359":
4320 +ifloat: 1
4321 +Test "tgamma (0.5) == sqrt (pi)":
4322 +float: 1
4323 +ifloat: 1
4324 +Test "tgamma (0.7) == 1.29805533264755778568117117915281162":
4325 double: 1
4326 float: 1
4327 idouble: 1
4328 ifloat: 1
4329 +
4330 +# y0
4331 +Test "y0 (0.125) == -1.38968062514384052915582277745018693":
4332 ildouble: 1
4333 ldouble: 1
4334 -
4335 -# y1
4336 -Test "y1 (0.125) == -5.19993611253477499595928744876579921":
4337 +Test "y0 (1.0) == 0.0882569642156769579829267660235151628":
4338 +double: 2
4339 +float: 1
4340 +idouble: 2
4341 +ifloat: 1
4342 +ildouble: 1
4343 +ldouble: 1
4344 +Test "y0 (1.5) == 0.382448923797758843955068554978089862":
4345 +double: 2
4346 +float: 1
4347 +idouble: 2
4348 +ifloat: 1
4349 +Test "y0 (10.0) == 0.0556711672835993914244598774101900481":
4350 +double: 1
4351 +float: 1
4352 +idouble: 1
4353 +ifloat: 1
4354 +Test "y0 (2.0) == 0.510375672649745119596606592727157873":
4355 double: 1
4356 idouble: 1
4357 -Test "y1 (1.5) == -0.412308626973911295952829820633445323":
4358 +Test "y0 (8.0) == 0.223521489387566220527323400498620359":
4359 +double: 1
4360 float: 1
4361 +idouble: 1
4362 ifloat: 1
4363 +ildouble: 1
4364 +ldouble: 1
4365 +
4366 +# y1
4367 Test "y1 (10.0) == 0.249015424206953883923283474663222803":
4368 double: 3
4369 float: 1
4370 @@ -794,30 +1138,27 @@ ldouble: 2
4371 Test "y1 (2.0) == -0.107032431540937546888370772277476637":
4372 double: 1
4373 float: 1
4374 -idouble: 2
4375 -ifloat: 2
4376 +idouble: 1
4377 +ifloat: 1
4378 Test "y1 (8.0) == -0.158060461731247494255555266187483550":
4379 double: 1
4380 float: 2
4381 idouble: 1
4382 ifloat: 2
4383 -ildouble: 2
4384 -ldouble: 2
4385 +ildouble: 1
4386 +ldouble: 1
4387
4388 # yn
4389 Test "yn (0, 0.125) == -1.38968062514384052915582277745018693":
4390 ildouble: 1
4391 ldouble: 1
4392 -Test "yn (0, 0.75) == -0.137172769385772397522814379396581855":
4393 -ildouble: 1
4394 -ldouble: 1
4395 Test "yn (0, 1.0) == 0.0882569642156769579829267660235151628":
4396 double: 2
4397 float: 1
4398 idouble: 2
4399 ifloat: 1
4400 -ildouble: 2
4401 -ldouble: 2
4402 +ildouble: 1
4403 +ldouble: 1
4404 Test "yn (0, 1.5) == 0.382448923797758843955068554978089862":
4405 double: 2
4406 float: 1
4407 @@ -828,8 +1169,6 @@ double: 1
4408 float: 1
4409 idouble: 1
4410 ifloat: 1
4411 -ildouble: 2
4412 -ldouble: 2
4413 Test "yn (0, 2.0) == 0.510375672649745119596606592727157873":
4414 double: 1
4415 idouble: 1
4416 @@ -838,14 +1177,8 @@ double: 1
4417 float: 1
4418 idouble: 1
4419 ifloat: 1
4420 -ildouble: 2
4421 -ldouble: 2
4422 -Test "yn (1, 0.125) == -5.19993611253477499595928744876579921":
4423 -double: 1
4424 -idouble: 1
4425 -Test "yn (1, 1.5) == -0.412308626973911295952829820633445323":
4426 -float: 2
4427 -ifloat: 2
4428 +ildouble: 1
4429 +ldouble: 1
4430 Test "yn (1, 10.0) == 0.249015424206953883923283474663222803":
4431 double: 3
4432 float: 1
4433 @@ -863,14 +1196,8 @@ double: 1
4434 float: 2
4435 idouble: 1
4436 ifloat: 2
4437 -ildouble: 2
4438 -ldouble: 2
4439 -Test "yn (3, 0.125) == -2612.69757350066712600220955744091741":
4440 -double: 1
4441 -idouble: 1
4442 -Test "yn (10, 0.125) == -127057845771019398.252538486899753195":
4443 -double: 1
4444 -idouble: 1
4445 +ildouble: 1
4446 +ldouble: 1
4447 Test "yn (10, 0.75) == -2133501638.90573424452445412893839236":
4448 double: 1
4449 float: 2
4450 @@ -881,21 +1208,14 @@ float: 2
4451 ifloat: 2
4452 Test "yn (10, 10.0) == -0.359814152183402722051986577343560609":
4453 double: 2
4454 -float: 2
4455 idouble: 2
4456 -ifloat: 2
4457 -ildouble: 2
4458 -ldouble: 2
4459 Test "yn (10, 2.0) == -129184.542208039282635913145923304214":
4460 double: 3
4461 float: 1
4462 idouble: 3
4463 ifloat: 1
4464 -ildouble: 2
4465 -ldouble: 2
4466 -Test "yn (3, 0.125) == -2612.69757350066712600220955744091741":
4467 -double: 1
4468 -idouble: 1
4469 +ildouble: 1
4470 +ldouble: 1
4471 Test "yn (3, 0.75) == -12.9877176234475433186319774484809207":
4472 float: 1
4473 ifloat: 1
4474 @@ -904,8 +1224,8 @@ double: 1
4475 float: 1
4476 idouble: 1
4477 ifloat: 1
4478 -ildouble: 2
4479 -ldouble: 2
4480 +ildouble: 1
4481 +ldouble: 1
4482 Test "yn (3, 2.0) == -1.12778377684042778608158395773179238":
4483 double: 1
4484 idouble: 1
4485 @@ -950,18 +1270,12 @@ ildouble: 1
4486 ldouble: 1
4487
4488 Function: Real part of "cacosh":
4489 -double: 1
4490 -float: 7
4491 -idouble: 1
4492 -ifloat: 7
4493 ildouble: 1
4494 ldouble: 1
4495
4496 Function: Imaginary part of "cacosh":
4497 -double: 1
4498 -float: 3
4499 -idouble: 1
4500 -ifloat: 3
4501 +float: 1
4502 +ifloat: 1
4503
4504 Function: Real part of "casin":
4505 double: 1
4506 @@ -992,8 +1306,6 @@ ildouble: 1
4507 ldouble: 1
4508
4509 Function: Real part of "catan":
4510 -float: 4
4511 -ifloat: 4
4512 ildouble: 1
4513 ldouble: 1
4514
4515 @@ -1009,10 +1321,6 @@ Function: Real part of "catanh":
4516 double: 4
4517 idouble: 4
4518
4519 -Function: Imaginary part of "catanh":
4520 -float: 6
4521 -ifloat: 6
4522 -
4523 Function: "cbrt":
4524 double: 1
4525 idouble: 1
4526 @@ -1066,8 +1374,6 @@ ildouble: 2
4527 ldouble: 2
4528
4529 Function: Imaginary part of "clog":
4530 -float: 3
4531 -ifloat: 3
4532 ildouble: 1
4533 ldouble: 1
4534
4535 @@ -1079,9 +1385,9 @@ ldouble: 3
4536
4537 Function: Imaginary part of "clog10":
4538 double: 1
4539 -float: 5
4540 +float: 1
4541 idouble: 1
4542 -ifloat: 5
4543 +ifloat: 1
4544 ildouble: 1
4545 ldouble: 1
4546
4547 @@ -1093,10 +1399,54 @@ ifloat: 1
4548 ildouble: 1
4549 ldouble: 1
4550
4551 +Function: "cos_downward":
4552 +float: 1
4553 +ifloat: 1
4554 +ildouble: 4
4555 +ldouble: 4
4556 +
4557 +Function: "cos_tonearest":
4558 +float: 1
4559 +ifloat: 1
4560 +ildouble: 1
4561 +ldouble: 1
4562 +
4563 +Function: "cos_towardzero":
4564 +float: 1
4565 +ifloat: 1
4566 +ildouble: 2
4567 +ldouble: 2
4568 +
4569 +Function: "cos_upward":
4570 +float: 2
4571 +ifloat: 2
4572 +ildouble: 2
4573 +ldouble: 2
4574 +
4575 Function: "cosh":
4576 ildouble: 1
4577 ldouble: 1
4578
4579 +Function: "cosh_downward":
4580 +float: 1
4581 +ifloat: 1
4582 +ildouble: 5269156250720
4583 +ldouble: 5269156250720
4584 +
4585 +Function: "cosh_tonearest":
4586 +ildouble: 5269156250719
4587 +ldouble: 5269156250719
4588 +
4589 +Function: "cosh_towardzero":
4590 +float: 1
4591 +ifloat: 1
4592 +ildouble: 5269156250720
4593 +ldouble: 5269156250720
4594 +
4595 +Function: "cosh_upward":
4596 +ildouble: 5269156250719
4597 +ldouble: 5269156250719
4598 +
4599 Function: Real part of "cpow":
4600 double: 2
4601 float: 5
4602 @@ -1113,10 +1463,6 @@ ifloat: 2
4603 ildouble: 2
4604 ldouble: 2
4605
4606 -Function: Imaginary part of "cproj":
4607 -ildouble: 1
4608 -ldouble: 1
4609 -
4610 Function: Real part of "csin":
4611 ildouble: 1
4612 ldouble: 1
4613 @@ -1146,8 +1492,6 @@ ildouble: 1
4614 ldouble: 1
4615
4616 Function: Real part of "ctan":
4617 -double: 1
4618 -idouble: 1
4619 ildouble: 1
4620 ldouble: 1
4621
4622 @@ -1201,6 +1545,28 @@ Function: "exp2":
4623 ildouble: 2
4624 ldouble: 2
4625
4626 +Function: "exp_downward":
4627 +float: 1
4628 +ifloat: 1
4629 +ildouble: 1
4630 +ldouble: 1
4631 +
4632 +Function: "exp_tonearest":
4633 +ildouble: 1
4634 +ldouble: 1
4635 +
4636 +Function: "exp_towardzero":
4637 +float: 1
4638 +ifloat: 1
4639 +ildouble: 1
4640 +ldouble: 1
4641 +
4642 +Function: "exp_upward":
4643 +float: 1
4644 +ifloat: 1
4645 +ildouble: 1
4646 +ldouble: 1
4647 +
4648 Function: "expm1":
4649 double: 1
4650 float: 1
4651 @@ -1218,10 +1584,10 @@ ildouble: 1
4652 ldouble: 1
4653
4654 Function: "j0":
4655 -double: 3
4656 -float: 2
4657 -idouble: 3
4658 -ifloat: 2
4659 +double: 2
4660 +float: 1
4661 +idouble: 2
4662 +ifloat: 1
4663 ildouble: 1
4664 ldouble: 1
4665
4666 @@ -1235,9 +1601,9 @@ ldouble: 1
4667
4668 Function: "jn":
4669 double: 3
4670 -float: 4
4671 +float: 3
4672 idouble: 3
4673 -ifloat: 4
4674 +ifloat: 3
4675 ildouble: 4
4676 ldouble: 4
4677
4678 @@ -1264,8 +1630,6 @@ ldouble: 1
4679 Function: "log1p":
4680 float: 1
4681 ifloat: 1
4682 -ildouble: 1
4683 -ldouble: 1
4684
4685 Function: "log2":
4686 ildouble: 1
4687 @@ -1275,10 +1639,52 @@ Function: "pow":
4688 ildouble: 1
4689 ldouble: 1
4690
4691 +Function: "pow_downward":
4692 +float: 1
4693 +ifloat: 1
4694 +ildouble: 1
4695 +ldouble: 1
4696 +
4697 +Function: "pow_towardzero":
4698 +float: 1
4699 +ifloat: 1
4700 +ildouble: 1
4701 +ldouble: 1
4702 +
4703 +Function: "pow_upward":
4704 +float: 1
4705 +ifloat: 1
4706 +ildouble: 1
4707 +ldouble: 1
4708 +
4709 Function: "sin":
4710 ildouble: 1
4711 ldouble: 1
4712
4713 +Function: "sin_downward":
4714 +float: 1
4715 +ifloat: 1
4716 +ildouble: 4
4717 +ldouble: 4
4718 +
4719 +Function: "sin_tonearest":
4720 +float: 1
4721 +ifloat: 1
4722 +ildouble: 1
4723 +ldouble: 1
4724 +
4725 +Function: "sin_towardzero":
4726 +float: 1
4727 +ifloat: 1
4728 +ildouble: 2
4729 +ldouble: 2
4730 +
4731 +Function: "sin_upward":
4732 +float: 2
4733 +ifloat: 2
4734 +ildouble: 2
4735 +ldouble: 2
4736 +
4737 Function: "sincos":
4738 double: 1
4739 float: 1
4740 @@ -1291,12 +1697,54 @@ Function: "sinh":
4741 ildouble: 1
4742 ldouble: 1
4743
4744 +Function: "sinh_downward":
4745 +float: 1
4746 +ifloat: 1
4747 +ildouble: 5269156250718
4748 +ldouble: 5269156250718
4749 +
4750 +Function: "sinh_tonearest":
4751 +ildouble: 5269156250719
4752 +ldouble: 5269156250719
4753 +
4754 +Function: "sinh_towardzero":
4755 +float: 1
4756 +ifloat: 1
4757 +ildouble: 5269156250718
4758 +ldouble: 5269156250718
4759 +
4760 +Function: "sinh_upward":
4761 +ildouble: 5269156250719
4762 +ldouble: 5269156250719
4763 +
4764 Function: "tan":
4765 double: 1
4766 idouble: 1
4767 ildouble: 1
4768 ldouble: 1
4769
4770 +Function: "tan_downward":
4771 +float: 1
4772 +ifloat: 1
4773 +ildouble: 2
4774 +ldouble: 2
4775 +
4776 +Function: "tan_tonearest":
4777 +ildouble: 1
4778 +ldouble: 1
4779 +
4780 +Function: "tan_towardzero":
4781 +float: 1
4782 +ifloat: 1
4783 +ildouble: 3
4784 +ldouble: 3
4785 +
4786 +Function: "tan_upward":
4787 +float: 1
4788 +ifloat: 1
4789 +ildouble: 3
4790 +ldouble: 3
4791 +
4792 Function: "tanh":
4793 ildouble: 1
4794 ldouble: 1
4795 diff -Nrup a/sysdeps/s390/fpu/libm-test-ulps b/sysdeps/s390/fpu/libm-test-ulps
4796 --- a/sysdeps/s390/fpu/libm-test-ulps 2010-05-04 05:27:23.000000000 -0600
4797 +++ b/sysdeps/s390/fpu/libm-test-ulps 2012-08-06 09:54:38.324772546 -0600
4798 @@ -31,16 +31,9 @@ ildouble: 1
4799 ldouble: 1
4800
4801 # cacosh
4802 -Test "Real part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
4803 -double: 1
4804 -float: 7
4805 -idouble: 1
4806 -ifloat: 7
4807 Test "Imaginary part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
4808 -double: 1
4809 -float: 3
4810 -idouble: 1
4811 -ifloat: 3
4812 +float: 1
4813 +ifloat: 1
4814 ildouble: 1
4815 ldouble: 1
4816
4817 @@ -83,17 +76,11 @@ ildouble: 1
4818 ldouble: 1
4819
4820 # catan
4821 -Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i":
4822 -float: 3
4823 -ifloat: 3
4824 Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i":
4825 double: 1
4826 float: 1
4827 idouble: 1
4828 ifloat: 1
4829 -Test "Real part of: catan (0.75 + 1.25 i) == 1.10714871779409050301706546017853704 + 0.549306144334054845697622618461262852 i":
4830 -float: 4
4831 -ifloat: 4
4832 Test "Imaginary part of: catan (0.75 + 1.25 i) == 1.10714871779409050301706546017853704 + 0.549306144334054845697622618461262852 i":
4833 ildouble: 1
4834 ldouble: 1
4835 @@ -102,17 +89,12 @@ ldouble: 1
4836 Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i":
4837 double: 4
4838 idouble: 4
4839 -Test "Imaginary part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i":
4840 -float: 4
4841 -ifloat: 4
4842 Test "Real part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i":
4843 double: 1
4844 idouble: 1
4845 ildouble: 1
4846 ldouble: 1
4847 Test "Imaginary part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i":
4848 -float: 6
4849 -ifloat: 6
4850 ildouble: 1
4851 ldouble: 1
4852
4853 @@ -185,9 +167,6 @@ ildouble: 1
4854 ldouble: 1
4855
4856 # clog
4857 -Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680267437207826593 - 2.1587989303424641704769327722648368 i":
4858 -float: 3
4859 -ifloat: 3
4860 Test "Real part of: clog (0.75 + 1.25 i) == 0.376885901188190075998919126749298416 + 1.03037682652431246378774332703115153 i":
4861 float: 1
4862 ifloat: 1
4863 @@ -210,9 +189,7 @@ ildouble: 1
4864 ldouble: 1
4865 Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
4866 double: 1
4867 -float: 5
4868 idouble: 1
4869 -ifloat: 5
4870 ildouble: 1
4871 ldouble: 1
4872 Test "Imaginary part of: clog10 (-3 + inf i) == inf + pi/2*log10(e) i":
4873 @@ -288,9 +265,7 @@ ifloat: 1
4874 # cos
4875 Test "cos (M_PI_6l * 2.0) == 0.5":
4876 double: 1
4877 -float: 1
4878 idouble: 1
4879 -ifloat: 1
4880 ildouble: 1
4881 ldouble: 1
4882 Test "cos (M_PI_6l * 4.0) == -0.5":
4883 @@ -300,11 +275,159 @@ idouble: 2
4884 ifloat: 1
4885 ildouble: 1
4886 ldouble: 1
4887 -Test "cos (pi/2) == 0":
4888 -double: 1
4889 +
4890 +# cos_downward
4891 +Test "cos_downward (1) == 0.5403023058681397174009366074429766037323":
4892 +float: 1
4893 +ifloat: 1
4894 +ildouble: 1
4895 +ldouble: 1
4896 +Test "cos_downward (10) == -0.8390715290764524522588639478240648345199":
4897 +ildouble: 1
4898 +ldouble: 1
4899 +Test "cos_downward (2) == -0.4161468365471423869975682295007621897660":
4900 +float: 1
4901 +ifloat: 1
4902 +ildouble: 1
4903 +ldouble: 1
4904 +Test "cos_downward (3) == -0.9899924966004454572715727947312613023937":
4905 +float: 1
4906 +ifloat: 1
4907 +ildouble: 1
4908 +ldouble: 1
4909 +Test "cos_downward (4) == -0.6536436208636119146391681830977503814241":
4910 +float: 1
4911 +ifloat: 1
4912 +ildouble: 1
4913 +ldouble: 1
4914 +Test "cos_downward (5) == 0.2836621854632262644666391715135573083344":
4915 +float: 1
4916 +ifloat: 1
4917 +ildouble: 1
4918 +ldouble: 1
4919 +Test "cos_downward (6) == 0.9601702866503660205456522979229244054519":
4920 +ildouble: 1
4921 +ldouble: 1
4922 +Test "cos_downward (7) == 0.7539022543433046381411975217191820122183":
4923 +float: 1
4924 +ifloat: 1
4925 +ildouble: 1
4926 +ldouble: 1
4927 +Test "cos_downward (8) == -0.1455000338086135258688413818311946826093":
4928 +float: 1
4929 +ifloat: 1
4930 +ildouble: 2
4931 +ldouble: 2
4932 +
4933 +# cos_tonearest
4934 +Test "cos_tonearest (7) == 0.7539022543433046381411975217191820122183":
4935 +float: 1
4936 +ifloat: 1
4937 +
4938 +# cos_towardzero
4939 +Test "cos_towardzero (1) == 0.5403023058681397174009366074429766037323":
4940 +ildouble: 1
4941 +ldouble: 1
4942 +Test "cos_towardzero (10) == -0.8390715290764524522588639478240648345199":
4943 +ildouble: 1
4944 +ldouble: 1
4945 +Test "cos_towardzero (2) == -0.4161468365471423869975682295007621897660":
4946 +float: 1
4947 +ifloat: 1
4948 +ildouble: 1
4949 +ldouble: 1
4950 +Test "cos_towardzero (3) == -0.9899924966004454572715727947312613023937":
4951 +float: 1
4952 +ifloat: 1
4953 +ildouble: 1
4954 +ldouble: 1
4955 +Test "cos_towardzero (4) == -0.6536436208636119146391681830977503814241":
4956 +ildouble: 1
4957 +ldouble: 1
4958 +Test "cos_towardzero (5) == 0.2836621854632262644666391715135573083344":
4959 +float: 1
4960 +ifloat: 1
4961 +ildouble: 1
4962 +ldouble: 1
4963 +Test "cos_towardzero (6) == 0.9601702866503660205456522979229244054519":
4964 +ildouble: 1
4965 +ldouble: 1
4966 +Test "cos_towardzero (7) == 0.7539022543433046381411975217191820122183":
4967 +float: 1
4968 +ifloat: 1
4969 +ildouble: 1
4970 +ldouble: 1
4971 +Test "cos_towardzero (8) == -0.1455000338086135258688413818311946826093":
4972 +float: 1
4973 +ifloat: 1
4974 +ildouble: 2
4975 +ldouble: 2
4976 +
4977 +# cos_upward
4978 +Test "cos_upward (10) == -0.8390715290764524522588639478240648345199":
4979 +float: 1
4980 +ifloat: 1
4981 +Test "cos_upward (6) == 0.9601702866503660205456522979229244054519":
4982 +float: 1
4983 +ifloat: 1
4984 +Test "cos_upward (7) == 0.7539022543433046381411975217191820122183":
4985 +float: 1
4986 +ifloat: 1
4987 +Test "cos_upward (9) == -0.9111302618846769883682947111811653112463":
4988 +float: 2
4989 +ifloat: 2
4990 +ildouble: 1
4991 +ldouble: 1
4992 +
4993 +# cosh_downward
4994 +Test "cosh_downward (22) == 1792456423.065795780980053377632656584997":
4995 +float: 1
4996 +ifloat: 1
4997 +ildouble: 1
4998 +ldouble: 1
4999 +Test "cosh_downward (23) == 4872401723.124451300068625740569997090344":
5000 +float: 1
5001 +ifloat: 1
5002 +ildouble: 1
5003 +ldouble: 1
5004 +Test "cosh_downward (24) == 13244561064.92173614708845674912733665919":
5005 +float: 1
5006 +ifloat: 1
5007 +ildouble: 1
5008 +ldouble: 1
5009 +
5010 +# cosh_tonearest
5011 +Test "cosh_tonearest (22) == 1792456423.065795780980053377632656584997":
5012 +ildouble: 1
5013 +ldouble: 1
5014 +
5015 +# cosh_towardzero
5016 +Test "cosh_towardzero (22) == 1792456423.065795780980053377632656584997":
5017 +float: 1
5018 +ifloat: 1
5019 +ildouble: 1
5020 +ldouble: 1
5021 +Test "cosh_towardzero (23) == 4872401723.124451300068625740569997090344":
5022 +float: 1
5023 +ifloat: 1
5024 +ildouble: 1
5025 +ldouble: 1
5026 +Test "cosh_towardzero (24) == 13244561064.92173614708845674912733665919":
5027 float: 1
5028 -idouble: 1
5029 ifloat: 1
5030 +ildouble: 1
5031 +ldouble: 1
5032 +
5033 +# cosh_upward
5034 +Test "cosh_upward (22) == 1792456423.065795780980053377632656584997":
5035 +ildouble: 1
5036 +ldouble: 1
5037 +Test "cosh_upward (23) == 4872401723.124451300068625740569997090344":
5038 +ildouble: 1
5039 +ldouble: 1
5040 +Test "cosh_upward (24) == 13244561064.92173614708845674912733665919":
5041 +ildouble: 1
5042 +ldouble: 1
5043
5044 # cpow
5045 Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
5046 @@ -393,8 +516,6 @@ ldouble: 1
5047
5048 # ctan
5049 Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
5050 -double: 1
5051 -idouble: 1
5052 ildouble: 1
5053 ldouble: 1
5054 Test "Imaginary part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
5055 @@ -467,6 +588,37 @@ Test "exp2 (10) == 1024":
5056 ildouble: 2
5057 ldouble: 2
5058
5059 +# exp_downward
5060 +Test "exp_downward (2) == e^2":
5061 +float: 1
5062 +ifloat: 1
5063 +ildouble: 1
5064 +ldouble: 1
5065 +Test "exp_downward (3) == e^3":
5066 +float: 1
5067 +ifloat: 1
5068 +ildouble: 1
5069 +ldouble: 1
5070 +
5071 +# exp_towardzero
5072 +Test "exp_towardzero (2) == e^2":
5073 +float: 1
5074 +ifloat: 1
5075 +ildouble: 1
5076 +ldouble: 1
5077 +Test "exp_towardzero (3) == e^3":
5078 +float: 1
5079 +ifloat: 1
5080 +ildouble: 1
5081 +ldouble: 1
5082 +
5083 +# exp_upward
5084 +Test "exp_upward (1) == e":
5085 +float: 1
5086 +ifloat: 1
5087 +ildouble: 1
5088 +ldouble: 1
5089 +
5090 # expm1
5091 Test "expm1 (0.75) == 1.11700001661267466854536981983709561":
5092 double: 1
5093 @@ -513,29 +665,27 @@ ifloat: 1
5094 # j0
5095 Test "j0 (-4.0) == -3.9714980986384737228659076845169804197562E-1":
5096 double: 1
5097 -float: 2
5098 +float: 1
5099 idouble: 1
5100 -ifloat: 2
5101 +ifloat: 1
5102 Test "j0 (0.75) == 0.864242275166648623555731103820923211":
5103 float: 1
5104 ifloat: 1
5105 Test "j0 (10.0) == -0.245935764451348335197760862485328754":
5106 -double: 3
5107 +double: 2
5108 float: 1
5109 -idouble: 3
5110 +idouble: 2
5111 ifloat: 1
5112 ildouble: 2
5113 ldouble: 2
5114 Test "j0 (2.0) == 0.223890779141235668051827454649948626":
5115 -float: 2
5116 -ifloat: 2
5117 ildouble: 2
5118 ldouble: 2
5119 Test "j0 (4.0) == -3.9714980986384737228659076845169804197562E-1":
5120 double: 1
5121 -float: 2
5122 +float: 1
5123 idouble: 1
5124 -ifloat: 2
5125 +ifloat: 1
5126 Test "j0 (8.0) == 0.171650807137553906090869407851972001":
5127 float: 1
5128 ifloat: 1
5129 @@ -569,29 +719,27 @@ ldouble: 4
5130 # jn
5131 Test "jn (0, -4.0) == -3.9714980986384737228659076845169804197562E-1":
5132 double: 1
5133 -float: 2
5134 +float: 1
5135 idouble: 1
5136 -ifloat: 2
5137 +ifloat: 1
5138 Test "jn (0, 0.75) == 0.864242275166648623555731103820923211":
5139 float: 1
5140 ifloat: 1
5141 Test "jn (0, 10.0) == -0.245935764451348335197760862485328754":
5142 -double: 3
5143 +double: 2
5144 float: 1
5145 -idouble: 3
5146 +idouble: 2
5147 ifloat: 1
5148 ildouble: 2
5149 ldouble: 2
5150 Test "jn (0, 2.0) == 0.223890779141235668051827454649948626":
5151 -float: 2
5152 -ifloat: 2
5153 ildouble: 2
5154 ldouble: 2
5155 Test "jn (0, 4.0) == -3.9714980986384737228659076845169804197562E-1":
5156 double: 1
5157 -float: 2
5158 +float: 1
5159 idouble: 1
5160 -ifloat: 2
5161 +ifloat: 1
5162 Test "jn (0, 8.0) == 0.171650807137553906090869407851972001":
5163 float: 1
5164 ifloat: 1
5165 @@ -640,15 +788,13 @@ Test "jn (10, 1.0) == 0.2630615123687453
5166 ildouble: 1
5167 ldouble: 1
5168 Test "jn (10, 10.0) == 0.207486106633358857697278723518753428":
5169 -double: 4
5170 -float: 3
5171 -idouble: 4
5172 -ifloat: 3
5173 +float: 1
5174 +ifloat: 1
5175 ildouble: 2
5176 ldouble: 2
5177 Test "jn (10, 2.0) == 0.251538628271673670963516093751820639e-6":
5178 -float: 4
5179 -ifloat: 4
5180 +float: 3
5181 +ifloat: 3
5182 Test "jn (3, 0.125) == 0.406503832554912875023029337653442868e-4":
5183 double: 1
5184 float: 1
5185 @@ -661,16 +807,16 @@ idouble: 1
5186 ifloat: 1
5187 Test "jn (3, 10.0) == 0.0583793793051868123429354784103409563":
5188 double: 3
5189 -float: 2
5190 +float: 1
5191 idouble: 3
5192 -ifloat: 2
5193 +ifloat: 1
5194 ildouble: 2
5195 ldouble: 2
5196 Test "jn (3, 2.0) == 0.128943249474402051098793332969239835":
5197 double: 1
5198 -float: 2
5199 +float: 1
5200 idouble: 1
5201 -ifloat: 2
5202 +ifloat: 1
5203
5204 # lgamma
5205 Test "lgamma (-0.5) == log(2*sqrt(pi))":
5206 @@ -713,71 +859,315 @@ Test "log2 (0.75) == -.41503749927884381
5207 ildouble: 1
5208 ldouble: 1
5209
5210 -# sincos
5211 -Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
5212 -double: 1
5213 +# pow_downward
5214 +Test "pow_downward (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
5215 float: 1
5216 -idouble: 1
5217 ifloat: 1
5218 -ildouble: 1
5219 -ldouble: 1
5220 -Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res":
5221 -double: 1
5222 +
5223 +# pow_towardzero
5224 +Test "pow_towardzero (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
5225 +float: 1
5226 +ifloat: 1
5227 +
5228 +# pow_upward
5229 +Test "pow_upward (1.0625, 1.125) == 1.070582293028761362162622578677070098674":
5230 float: 1
5231 -idouble: 1
5232 ifloat: 1
5233 ildouble: 1
5234 ldouble: 1
5235 -Test "sincos (pi/2, &sin_res, &cos_res) puts 0 in cos_res":
5236 -double: 1
5237 +
5238 +# sin_downward
5239 +Test "sin_downward (1) == 0.8414709848078965066525023216302989996226":
5240 +ildouble: 1
5241 +ldouble: 1
5242 +Test "sin_downward (10) == -0.5440211108893698134047476618513772816836":
5243 float: 1
5244 -idouble: 1
5245 ifloat: 1
5246 -Test "sincos (pi/6, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in cos_res":
5247 +Test "sin_downward (2) == 0.9092974268256816953960198659117448427023":
5248 +ildouble: 1
5249 +ldouble: 1
5250 +Test "sin_downward (3) == 0.1411200080598672221007448028081102798469":
5251 float: 1
5252 ifloat: 1
5253 -
5254 -# sqrt
5255 -Test "sqrt (2) == M_SQRT2l":
5256 ildouble: 1
5257 ldouble: 1
5258 -
5259 -# tan
5260 -Test "tan (pi/4) == 1":
5261 -double: 1
5262 -idouble: 1
5263 -
5264 -# tanh
5265 -Test "tanh (-0.75) == -0.635148952387287319214434357312496495":
5266 +Test "sin_downward (4) == -0.7568024953079282513726390945118290941359":
5267 ildouble: 1
5268 ldouble: 1
5269 -Test "tanh (-1.0) == -0.7615941559557648881194582826047935904":
5270 +Test "sin_downward (5) == -0.9589242746631384688931544061559939733525":
5271 +float: 1
5272 +ifloat: 1
5273 ildouble: 1
5274 ldouble: 1
5275 -Test "tanh (0.75) == 0.635148952387287319214434357312496495":
5276 +Test "sin_downward (6) == -0.2794154981989258728115554466118947596280":
5277 +float: 1
5278 +ifloat: 1
5279 ildouble: 1
5280 ldouble: 1
5281 -Test "tanh (1.0) == 0.7615941559557648881194582826047935904":
5282 +Test "sin_downward (8) == 0.9893582466233817778081235982452886721164":
5283 ildouble: 1
5284 ldouble: 1
5285
5286 -# tgamma
5287 -Test "tgamma (-0.5) == -2 sqrt (pi)":
5288 -double: 1
5289 +# sin_tonearest
5290 +Test "sin_tonearest (1) == 0.8414709848078965066525023216302989996226":
5291 float: 1
5292 -idouble: 1
5293 ifloat: 1
5294 ildouble: 1
5295 ldouble: 1
5296 -Test "tgamma (0.5) == sqrt (pi)":
5297 +Test "sin_tonearest (3) == 0.1411200080598672221007448028081102798469":
5298 +ildouble: 1
5299 +ldouble: 1
5300 +Test "sin_tonearest (6) == -0.2794154981989258728115554466118947596280":
5301 +ildouble: 1
5302 +ldouble: 1
5303 +Test "sin_tonearest (9) == 0.4121184852417565697562725663524351793439":
5304 +ildouble: 1
5305 +ldouble: 1
5306 +
5307 +# sin_towardzero
5308 +Test "sin_towardzero (1) == 0.8414709848078965066525023216302989996226":
5309 float: 1
5310 ifloat: 1
5311 -Test "tgamma (0.7) == 1.29805533264755778568117117915281162":
5312 -double: 1
5313 +Test "sin_towardzero (10) == -0.5440211108893698134047476618513772816836":
5314 float: 1
5315 -idouble: 1
5316 ifloat: 1
5317 -Test "tgamma (4) == 6":
5318 +Test "sin_towardzero (2) == 0.9092974268256816953960198659117448427023":
5319 +ildouble: 1
5320 +ldouble: 1
5321 +Test "sin_towardzero (3) == 0.1411200080598672221007448028081102798469":
5322 +ildouble: 1
5323 +ldouble: 1
5324 +Test "sin_towardzero (4) == -0.7568024953079282513726390945118290941359":
5325 +float: 1
5326 +ifloat: 1
5327 +Test "sin_towardzero (5) == -0.9589242746631384688931544061559939733525":
5328 +float: 1
5329 +ifloat: 1
5330 +ildouble: 1
5331 +ldouble: 1
5332 +Test "sin_towardzero (6) == -0.2794154981989258728115554466118947596280":
5333 +ildouble: 1
5334 +ldouble: 1
5335 +Test "sin_towardzero (8) == 0.9893582466233817778081235982452886721164":
5336 +ildouble: 1
5337 +ldouble: 1
5338 +Test "sin_towardzero (9) == 0.4121184852417565697562725663524351793439":
5339 +float: 1
5340 +ifloat: 1
5341 +ildouble: 2
5342 +ldouble: 2
5343 +
5344 +# sin_upward
5345 +Test "sin_upward (1) == 0.8414709848078965066525023216302989996226":
5346 +float: 1
5347 +ifloat: 1
5348 +ildouble: 1
5349 +ldouble: 1
5350 +Test "sin_upward (10) == -0.5440211108893698134047476618513772816836":
5351 +ildouble: 1
5352 +ldouble: 1
5353 +Test "sin_upward (2) == 0.9092974268256816953960198659117448427023":
5354 +float: 2
5355 +ifloat: 2
5356 +Test "sin_upward (3) == 0.1411200080598672221007448028081102798469":
5357 +ildouble: 1
5358 +ldouble: 1
5359 +Test "sin_upward (4) == -0.7568024953079282513726390945118290941359":
5360 +float: 1
5361 +ifloat: 1
5362 +ildouble: 1
5363 +ldouble: 1
5364 +Test "sin_upward (7) == 0.6569865987187890903969990915936351779369":
5365 +ildouble: 1
5366 +ldouble: 1
5367 +Test "sin_upward (9) == 0.4121184852417565697562725663524351793439":
5368 +float: 1
5369 +ifloat: 1
5370 +ildouble: 1
5371 +ldouble: 1
5372 +
5373 +# sincos
5374 +Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
5375 +double: 1
5376 +idouble: 1
5377 +ildouble: 1
5378 +ldouble: 1
5379 +Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res":
5380 +double: 1
5381 +float: 1
5382 +idouble: 1
5383 +ifloat: 1
5384 +ildouble: 1
5385 +ldouble: 1
5386 +Test "sincos (pi/6, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in cos_res":
5387 +float: 1
5388 +ifloat: 1
5389 +
5390 +# sinh_downward
5391 +Test "sinh_downward (22) == 1792456423.065795780701106568345764104225":
5392 +float: 1
5393 +ifloat: 1
5394 +ildouble: 1
5395 +ldouble: 1
5396 +Test "sinh_downward (23) == 4872401723.124451299966006944252978187305":
5397 +float: 1
5398 +ifloat: 1
5399 +ildouble: 2
5400 +ldouble: 2
5401 +Test "sinh_downward (24) == 13244561064.92173614705070540368454568168":
5402 +float: 1
5403 +ifloat: 1
5404 +ildouble: 1
5405 +ldouble: 1
5406 +
5407 +# sinh_towardzero
5408 +Test "sinh_towardzero (22) == 1792456423.065795780701106568345764104225":
5409 +float: 1
5410 +ifloat: 1
5411 +ildouble: 1
5412 +ldouble: 1
5413 +Test "sinh_towardzero (23) == 4872401723.124451299966006944252978187305":
5414 +float: 1
5415 +ifloat: 1
5416 +ildouble: 2
5417 +ldouble: 2
5418 +Test "sinh_towardzero (24) == 13244561064.92173614705070540368454568168":
5419 +float: 1
5420 +ifloat: 1
5421 +
5422 +# sinh_upward
5423 +Test "sinh_upward (22) == 1792456423.065795780701106568345764104225":
5424 +ildouble: 1
5425 +ldouble: 1
5426 +Test "sinh_upward (23) == 4872401723.124451299966006944252978187305":
5427 +ildouble: 1
5428 +ldouble: 1
5429 +Test "sinh_upward (24) == 13244561064.92173614705070540368454568168":
5430 +ildouble: 1
5431 +ldouble: 1
5432 +
5433 +# sqrt
5434 +Test "sqrt (2) == M_SQRT2l":
5435 +ildouble: 1
5436 +ldouble: 1
5437 +
5438 +# tan_downward
5439 +Test "tan_downward (1) == 1.5574077246549022305069748074583601730873":
5440 +float: 1
5441 +ifloat: 1
5442 +ildouble: 1
5443 +ldouble: 1
5444 +Test "tan_downward (10) == 0.6483608274590866712591249330098086768169":
5445 +float: 1
5446 +ifloat: 1
5447 +Test "tan_downward (2) == -2.1850398632615189916433061023136825434320":
5448 +float: 1
5449 +ifloat: 1
5450 +ildouble: 1
5451 +ldouble: 1
5452 +Test "tan_downward (6) == -0.2910061913847491570536995888681755428312":
5453 +float: 1
5454 +ifloat: 1
5455 +Test "tan_downward (8) == -6.7997114552203786999252627596086333648814":
5456 +float: 1
5457 +ifloat: 1
5458 +ildouble: 1
5459 +ldouble: 1
5460 +Test "tan_downward (9) == -0.4523156594418098405903708757987855343087":
5461 +float: 1
5462 +ifloat: 1
5463 +
5464 +# tan_towardzero
5465 +Test "tan_towardzero (10) == 0.6483608274590866712591249330098086768169":
5466 +float: 1
5467 +ifloat: 1
5468 +Test "tan_towardzero (3) == -0.1425465430742778052956354105339134932261":
5469 +float: 1
5470 +ifloat: 1
5471 +ildouble: 1
5472 +ldouble: 1
5473 +Test "tan_towardzero (4) == 1.1578212823495775831373424182673239231198":
5474 +float: 1
5475 +ifloat: 1
5476 +ildouble: 1
5477 +ldouble: 1
5478 +Test "tan_towardzero (5) == -3.3805150062465856369827058794473439087096":
5479 +float: 1
5480 +ifloat: 1
5481 +ildouble: 1
5482 +ldouble: 1
5483 +Test "tan_towardzero (6) == -0.2910061913847491570536995888681755428312":
5484 +ildouble: 1
5485 +ldouble: 1
5486 +Test "tan_towardzero (9) == -0.4523156594418098405903708757987855343087":
5487 +float: 1
5488 +ifloat: 1
5489 +ildouble: 1
5490 +ldouble: 1
5491 +
5492 +# tan_upward
5493 +Test "tan_upward (1) == 1.5574077246549022305069748074583601730873":
5494 +float: 1
5495 +ifloat: 1
5496 +Test "tan_upward (10) == 0.6483608274590866712591249330098086768169":
5497 +float: 1
5498 +ifloat: 1
5499 +ildouble: 1
5500 +ldouble: 1
5501 +Test "tan_upward (2) == -2.1850398632615189916433061023136825434320":
5502 +ildouble: 1
5503 +ldouble: 1
5504 +Test "tan_upward (3) == -0.1425465430742778052956354105339134932261":
5505 +float: 1
5506 +ifloat: 1
5507 +ildouble: 1
5508 +ldouble: 1
5509 +Test "tan_upward (4) == 1.1578212823495775831373424182673239231198":
5510 +ildouble: 1
5511 +ldouble: 1
5512 +Test "tan_upward (5) == -3.3805150062465856369827058794473439087096":
5513 +float: 1
5514 +ifloat: 1
5515 +ildouble: 1
5516 +ldouble: 1
5517 +Test "tan_upward (6) == -0.2910061913847491570536995888681755428312":
5518 +ildouble: 1
5519 +ldouble: 1
5520 +Test "tan_upward (9) == -0.4523156594418098405903708757987855343087":
5521 +ildouble: 1
5522 +ldouble: 1
5523 +
5524 +# tanh
5525 +Test "tanh (-0.75) == -0.635148952387287319214434357312496495":
5526 +ildouble: 1
5527 +ldouble: 1
5528 +Test "tanh (-1.0) == -0.7615941559557648881194582826047935904":
5529 +ildouble: 1
5530 +ldouble: 1
5531 +Test "tanh (0.75) == 0.635148952387287319214434357312496495":
5532 +ildouble: 1
5533 +ldouble: 1
5534 +Test "tanh (1.0) == 0.7615941559557648881194582826047935904":
5535 +ildouble: 1
5536 +ldouble: 1
5537 +
5538 +# tgamma
5539 +Test "tgamma (-0.5) == -2 sqrt (pi)":
5540 +double: 1
5541 +float: 1
5542 +idouble: 1
5543 +ifloat: 1
5544 +ildouble: 1
5545 +ldouble: 1
5546 +Test "tgamma (0.5) == sqrt (pi)":
5547 +float: 1
5548 +ifloat: 1
5549 +Test "tgamma (0.7) == 1.29805533264755778568117117915281162":
5550 +double: 1
5551 +float: 1
5552 +idouble: 1
5553 +ifloat: 1
5554 +Test "tgamma (4) == 6":
5555 ildouble: 1
5556 ldouble: 1
5557
5558 @@ -917,17 +1307,13 @@ ifloat: 2
5559 ildouble: 5
5560 ldouble: 5
5561 Test "yn (10, 1.0) == -121618014.278689189288130426667971145":
5562 -double: 1
5563 float: 2
5564 -idouble: 1
5565 ifloat: 2
5566 ildouble: 1
5567 ldouble: 1
5568 Test "yn (10, 10.0) == -0.359814152183402722051986577343560609":
5569 double: 2
5570 -float: 2
5571 idouble: 2
5572 -ifloat: 2
5573 ildouble: 2
5574 ldouble: 2
5575 Test "yn (10, 2.0) == -129184.542208039282635913145923304214":
5576 @@ -941,9 +1327,7 @@ Test "yn (3, 0.125) == -2612.69757350066
5577 double: 1
5578 idouble: 1
5579 Test "yn (3, 0.75) == -12.9877176234475433186319774484809207":
5580 -double: 1
5581 float: 1
5582 -idouble: 1
5583 ifloat: 1
5584 ildouble: 2
5585 ldouble: 2
5586 @@ -973,17 +1357,9 @@ Function: Imaginary part of "cacos":
5587 ildouble: 1
5588 ldouble: 1
5589
5590 -Function: Real part of "cacosh":
5591 -double: 1
5592 -float: 7
5593 -idouble: 1
5594 -ifloat: 7
5595 -
5596 Function: Imaginary part of "cacosh":
5597 -double: 1
5598 -float: 3
5599 -idouble: 1
5600 -ifloat: 3
5601 +float: 1
5602 +ifloat: 1
5603 ildouble: 1
5604 ldouble: 1
5605
5606 @@ -1013,10 +1389,6 @@ ifloat: 6
5607 ildouble: 2
5608 ldouble: 2
5609
5610 -Function: Real part of "catan":
5611 -float: 4
5612 -ifloat: 4
5613 -
5614 Function: Imaginary part of "catan":
5615 double: 1
5616 float: 1
5617 @@ -1032,8 +1404,6 @@ ildouble: 1
5618 ldouble: 1
5619
5620 Function: Imaginary part of "catanh":
5621 -float: 6
5622 -ifloat: 6
5623 ildouble: 1
5624 ldouble: 1
5625
5626 @@ -1089,10 +1459,6 @@ ifloat: 1
5627 ildouble: 1
5628 ldouble: 1
5629
5630 -Function: Imaginary part of "clog":
5631 -float: 3
5632 -ifloat: 3
5633 -
5634 Function: Real part of "clog10":
5635 float: 1
5636 ifloat: 1
5637 @@ -1101,9 +1467,9 @@ ldouble: 1
5638
5639 Function: Imaginary part of "clog10":
5640 double: 1
5641 -float: 5
5642 +float: 1
5643 idouble: 1
5644 -ifloat: 5
5645 +ifloat: 1
5646 ildouble: 1
5647 ldouble: 1
5648
5649 @@ -1115,6 +1481,48 @@ ifloat: 1
5650 ildouble: 1
5651 ldouble: 1
5652
5653 +Function: "cos_downward":
5654 +float: 1
5655 +ifloat: 1
5656 +ildouble: 2
5657 +ldouble: 2
5658 +
5659 +Function: "cos_tonearest":
5660 +float: 1
5661 +ifloat: 1
5662 +
5663 +Function: "cos_towardzero":
5664 +float: 1
5665 +ifloat: 1
5666 +ildouble: 2
5667 +ldouble: 2
5668 +
5669 +Function: "cos_upward":
5670 +float: 2
5671 +ifloat: 2
5672 +ildouble: 1
5673 +ldouble: 1
5674 +
5675 +Function: "cosh_downward":
5676 +float: 1
5677 +ifloat: 1
5678 +ildouble: 1
5679 +ldouble: 1
5680 +
5681 +Function: "cosh_tonearest":
5682 +ildouble: 1
5683 +ldouble: 1
5684 +
5685 +Function: "cosh_towardzero":
5686 +float: 1
5687 +ifloat: 1
5688 +ildouble: 1
5689 +ldouble: 1
5690 +
5691 +Function: "cosh_upward":
5692 +ildouble: 1
5693 +ldouble: 1
5694 +
5695 Function: Real part of "cpow":
5696 double: 2
5697 float: 4
5698 @@ -1162,8 +1570,6 @@ ildouble: 1
5699 ldouble: 1
5700
5701 Function: Real part of "ctan":
5702 -double: 1
5703 -idouble: 1
5704 ildouble: 1
5705 ldouble: 1
5706
5707 @@ -1211,6 +1617,24 @@ Function: "exp2":
5708 ildouble: 2
5709 ldouble: 2
5710
5711 +Function: "exp_downward":
5712 +float: 1
5713 +ifloat: 1
5714 +ildouble: 1
5715 +ldouble: 1
5716 +
5717 +Function: "exp_towardzero":
5718 +float: 1
5719 +ifloat: 1
5720 +ildouble: 1
5721 +ldouble: 1
5722 +
5723 +Function: "exp_upward":
5724 +float: 1
5725 +ifloat: 1
5726 +ildouble: 1
5727 +ldouble: 1
5728 +
5729 Function: "expm1":
5730 double: 1
5731 float: 1
5732 @@ -1228,10 +1652,10 @@ float: 1
5733 ifloat: 1
5734
5735 Function: "j0":
5736 -double: 3
5737 -float: 2
5738 -idouble: 3
5739 -ifloat: 2
5740 +double: 2
5741 +float: 1
5742 +idouble: 2
5743 +ifloat: 1
5744 ildouble: 2
5745 ldouble: 2
5746
5747 @@ -1244,10 +1668,10 @@ ildouble: 4
5748 ldouble: 4
5749
5750 Function: "jn":
5751 -double: 4
5752 -float: 4
5753 -idouble: 4
5754 -ifloat: 4
5755 +double: 3
5756 +float: 3
5757 +idouble: 3
5758 +ifloat: 3
5759 ildouble: 4
5760 ldouble: 4
5761
5762 @@ -1277,6 +1701,44 @@ Function: "log2":
5763 ildouble: 1
5764 ldouble: 1
5765
5766 +Function: "pow_downward":
5767 +float: 1
5768 +ifloat: 1
5769 +
5770 +Function: "pow_towardzero":
5771 +float: 1
5772 +ifloat: 1
5773 +
5774 +Function: "pow_upward":
5775 +float: 1
5776 +ifloat: 1
5777 +ildouble: 1
5778 +ldouble: 1
5779 +
5780 +Function: "sin_downward":
5781 +float: 1
5782 +ifloat: 1
5783 +ildouble: 1
5784 +ldouble: 1
5785 +
5786 +Function: "sin_tonearest":
5787 +float: 1
5788 +ifloat: 1
5789 +ildouble: 1
5790 +ldouble: 1
5791 +
5792 +Function: "sin_towardzero":
5793 +float: 1
5794 +ifloat: 1
5795 +ildouble: 2
5796 +ldouble: 2
5797 +
5798 +Function: "sin_upward":
5799 +float: 2
5800 +ifloat: 2
5801 +ildouble: 1
5802 +ldouble: 1
5803 +
5804 Function: "sincos":
5805 double: 1
5806 float: 1
5807 @@ -1285,6 +1747,22 @@ ifloat: 1
5808 ildouble: 1
5809 ldouble: 1
5810
5811 +Function: "sinh_downward":
5812 +float: 1
5813 +ifloat: 1
5814 +ildouble: 2
5815 +ldouble: 2
5816 +
5817 +Function: "sinh_towardzero":
5818 +float: 1
5819 +ifloat: 1
5820 +ildouble: 2
5821 +ldouble: 2
5822 +
5823 +Function: "sinh_upward":
5824 +ildouble: 1
5825 +ldouble: 1
5826 +
5827 Function: "sqrt":
5828 ildouble: 1
5829 ldouble: 1
5830 @@ -1293,6 +1771,24 @@ Function: "tan":
5831 double: 1
5832 idouble: 1
5833
5834 +Function: "tan_downward":
5835 +float: 1
5836 +ifloat: 1
5837 +ildouble: 1
5838 +ldouble: 1
5839 +
5840 +Function: "tan_towardzero":
5841 +float: 1
5842 +ifloat: 1
5843 +ildouble: 1
5844 +ldouble: 1
5845 +
5846 +Function: "tan_upward":
5847 +float: 1
5848 +ifloat: 1
5849 +ildouble: 1
5850 +ldouble: 1
5851 +
5852 Function: "tanh":
5853 ildouble: 1
5854 ldouble: 1
5855 diff -Nrup a/sysdeps/x86_64/fpu/libm-test-ulps b/sysdeps/x86_64/fpu/libm-test-ulps
5856 --- a/sysdeps/x86_64/fpu/libm-test-ulps 2010-05-04 05:27:23.000000000 -0600
5857 +++ b/sysdeps/x86_64/fpu/libm-test-ulps 2012-08-06 11:02:14.602759422 -0600
5858 @@ -42,26 +42,13 @@ ldouble: 1
5859
5860 # cacos
5861 Test "Imaginary part of: cacos (0.75 + 1.25 i) == 1.11752014915610270578240049553777969 - 1.13239363160530819522266333696834467 i":
5862 -float: 1
5863 -ifloat: 1
5864 ildouble: 2
5865 ldouble: 2
5866
5867 # cacosh
5868 -Test "Real part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
5869 -double: 1
5870 -float: 7
5871 -idouble: 1
5872 -ifloat: 7
5873 -ildouble: 6
5874 -ldouble: 6
5875 Test "Imaginary part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
5876 -double: 1
5877 -float: 3
5878 -idouble: 1
5879 -ifloat: 3
5880 -ildouble: 1
5881 -ldouble: 1
5882 +float: 1
5883 +ifloat: 1
5884 Test "Real part of: cacosh (0.75 + 1.25 i) == 1.13239363160530819522266333696834467 + 1.11752014915610270578240049553777969 i":
5885 ildouble: 1
5886 ldouble: 1
5887 @@ -75,8 +62,6 @@ ifloat: 1
5888 ildouble: 2
5889 ldouble: 2
5890 Test "Imaginary part of: casin (0.75 + 1.25 i) == 0.453276177638793913448921196101971749 + 1.13239363160530819522266333696834467 i":
5891 -float: 1
5892 -ifloat: 1
5893 ildouble: 2
5894 ldouble: 2
5895
5896 @@ -103,21 +88,15 @@ double: 1
5897 float: 1
5898 idouble: 1
5899 ifloat: 1
5900 -ldouble: 1
5901 ildouble: 1
5902 +ldouble: 1
5903
5904 # catan
5905 -Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i":
5906 -float: 3
5907 -ifloat: 3
5908 Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i":
5909 double: 1
5910 float: 1
5911 idouble: 1
5912 ifloat: 1
5913 -Test "Real part of: catan (0.75 + 1.25 i) == 1.10714871779409050301706546017853704 + 0.549306144334054845697622618461262852 i":
5914 -float: 4
5915 -ifloat: 4
5916
5917 # catanh
5918 Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i":
5919 @@ -125,15 +104,9 @@ double: 4
5920 idouble: 4
5921 ildouble: 1
5922 ldouble: 1
5923 -Test "Imaginary part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i":
5924 -float: 4
5925 -ifloat: 4
5926 Test "Real part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i":
5927 double: 1
5928 idouble: 1
5929 -Test "Imaginary part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i":
5930 -float: 6
5931 -ifloat: 6
5932
5933 # cbrt
5934 Test "cbrt (-0.001) == -0.1":
5935 @@ -152,14 +125,9 @@ ildouble: 1
5936 ldouble: 1
5937
5938 # ccos
5939 -Test "Real part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i":
5940 -double: 1
5941 -idouble: 1
5942 Test "Imaginary part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i":
5943 float: 1
5944 ifloat: 1
5945 -ildouble: 1
5946 -ldouble: 1
5947 Test "Real part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i":
5948 double: 1
5949 float: 1
5950 @@ -168,19 +136,17 @@ ifloat: 1
5951 ildouble: 1
5952 ldouble: 1
5953 Test "Imaginary part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i":
5954 -ildouble: 1
5955 -ldouble: 1
5956 float: 1
5957 ifloat: 1
5958 +ildouble: 1
5959 +ldouble: 1
5960
5961 # ccosh
5962 Test "Real part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
5963 float: 1
5964 ifloat: 1
5965 Test "Imaginary part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
5966 -double: 1
5967 float: 1
5968 -idouble: 1
5969 ifloat: 1
5970 ildouble: 1
5971 ldouble: 1
5972 @@ -205,9 +171,6 @@ ildouble: 1
5973 ldouble: 1
5974
5975 # clog
5976 -Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680267437207826593 - 2.1587989303424641704769327722648368 i":
5977 -float: 3
5978 -ifloat: 3
5979 Test "Real part of: clog (0.75 + 1.25 i) == 0.376885901188190075998919126749298416 + 1.03037682652431246378774332703115153 i":
5980 float: 1
5981 ifloat: 1
5982 @@ -227,11 +190,7 @@ idouble: 1
5983 ifloat: 1
5984 Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
5985 double: 1
5986 -float: 5
5987 idouble: 1
5988 -ifloat: 5
5989 -ildouble: 1
5990 -ldouble: 1
5991 Test "Imaginary part of: clog10 (-3 + inf i) == inf + pi/2*log10(e) i":
5992 double: 1
5993 float: 1
5994 @@ -276,9 +235,7 @@ float: 1
5995 idouble: 1
5996 ifloat: 1
5997 Test "Real part of: clog10 (0.75 + 1.25 i) == 0.163679467193165171449476605077428975 + 0.447486970040493067069984724340855636 i":
5998 -double: 1
5999 float: 1
6000 -idouble: 1
6001 ifloat: 1
6002 ildouble: 1
6003 ldouble: 1
6004 @@ -306,33 +263,164 @@ ifloat: 1
6005 # cos
6006 Test "cos (M_PI_6l * 2.0) == 0.5":
6007 double: 1
6008 -float: 1
6009 idouble: 1
6010 -ifloat: 1
6011 Test "cos (M_PI_6l * 4.0) == -0.5":
6012 double: 2
6013 float: 1
6014 idouble: 2
6015 ifloat: 1
6016 +
6017 +# cos_downward
6018 +Test "cos_downward (1) == 0.5403023058681397174009366074429766037323":
6019 +float: 1
6020 +ifloat: 1
6021 ildouble: 1
6022 ldouble: 1
6023 -Test "cos (pi/2) == 0":
6024 -double: 1
6025 +Test "cos_downward (2) == -0.4161468365471423869975682295007621897660":
6026 +float: 1
6027 +ifloat: 1
6028 +Test "cos_downward (3) == -0.9899924966004454572715727947312613023937":
6029 +float: 1
6030 +ifloat: 1
6031 +Test "cos_downward (4) == -0.6536436208636119146391681830977503814241":
6032 float: 1
6033 -idouble: 1
6034 ifloat: 1
6035 ildouble: 1
6036 ldouble: 1
6037 -Test "cos (0.80190127184058835) == 0.69534156199418473":
6038 -double: 1
6039 -idouble: 1
6040 +Test "cos_downward (5) == 0.2836621854632262644666391715135573083344":
6041 +float: 1
6042 +ifloat: 1
6043 +Test "cos_downward (7) == 0.7539022543433046381411975217191820122183":
6044 +float: 1
6045 +ifloat: 1
6046 +ildouble: 1
6047 +ldouble: 1
6048 +Test "cos_downward (8) == -0.1455000338086135258688413818311946826093":
6049 +float: 1
6050 +ifloat: 1
6051 +ildouble: 1
6052 +ldouble: 1
6053 +Test "cos_downward (9) == -0.9111302618846769883682947111811653112463":
6054 +ildouble: 1
6055 +ldouble: 1
6056 +
6057 +# cos_tonearest
6058 +Test "cos_tonearest (7) == 0.7539022543433046381411975217191820122183":
6059 +float: 1
6060 +ifloat: 1
6061 +Test "cos_tonearest (8) == -0.1455000338086135258688413818311946826093":
6062 +ildouble: 1
6063 +ldouble: 1
6064 +Test "cos_tonearest (9) == -0.9111302618846769883682947111811653112463":
6065 +ildouble: 1
6066 +ldouble: 1
6067 +
6068 +# cos_towardzero
6069 +Test "cos_towardzero (1) == 0.5403023058681397174009366074429766037323":
6070 +ildouble: 1
6071 +ldouble: 1
6072 +Test "cos_towardzero (10) == -0.8390715290764524522588639478240648345199":
6073 +ildouble: 1
6074 +ldouble: 1
6075 +Test "cos_towardzero (2) == -0.4161468365471423869975682295007621897660":
6076 +float: 1
6077 +ifloat: 1
6078 +ildouble: 1
6079 +ldouble: 1
6080 +Test "cos_towardzero (3) == -0.9899924966004454572715727947312613023937":
6081 +float: 1
6082 +ifloat: 1
6083 +ildouble: 1
6084 +ldouble: 1
6085 +Test "cos_towardzero (5) == 0.2836621854632262644666391715135573083344":
6086 +float: 1
6087 +ifloat: 1
6088 +Test "cos_towardzero (7) == 0.7539022543433046381411975217191820122183":
6089 +float: 1
6090 +ifloat: 1
6091 +ildouble: 1
6092 +ldouble: 1
6093 +Test "cos_towardzero (8) == -0.1455000338086135258688413818311946826093":
6094 +float: 1
6095 +ifloat: 1
6096 +
6097 +# cos_upward
6098 +Test "cos_upward (10) == -0.8390715290764524522588639478240648345199":
6099 +float: 1
6100 +ifloat: 1
6101 +ildouble: 1
6102 +ldouble: 1
6103 +Test "cos_upward (2) == -0.4161468365471423869975682295007621897660":
6104 +ildouble: 1
6105 +ldouble: 1
6106 +Test "cos_upward (3) == -0.9899924966004454572715727947312613023937":
6107 +ildouble: 1
6108 +ldouble: 1
6109 +Test "cos_upward (5) == 0.2836621854632262644666391715135573083344":
6110 +ildouble: 1
6111 +ldouble: 1
6112 +Test "cos_upward (6) == 0.9601702866503660205456522979229244054519":
6113 +float: 1
6114 +ifloat: 1
6115 +ildouble: 1
6116 +ldouble: 1
6117 +Test "cos_upward (7) == 0.7539022543433046381411975217191820122183":
6118 +float: 1
6119 +ifloat: 1
6120 +Test "cos_upward (9) == -0.9111302618846769883682947111811653112463":
6121 +float: 2
6122 +ifloat: 2
6123 +
6124 +# cosh_downward
6125 +Test "cosh_downward (22) == 1792456423.065795780980053377632656584997":
6126 +float: 1
6127 +ifloat: 1
6128 +ildouble: 2
6129 +ldouble: 2
6130 +Test "cosh_downward (23) == 4872401723.124451300068625740569997090344":
6131 +float: 1
6132 +ifloat: 1
6133 +ildouble: 1
6134 +ldouble: 1
6135 +Test "cosh_downward (24) == 13244561064.92173614708845674912733665919":
6136 +float: 1
6137 +ifloat: 1
6138 +ildouble: 1
6139 +ldouble: 1
6140 +
6141 +# cosh_tonearest
6142 +Test "cosh_tonearest (22) == 1792456423.065795780980053377632656584997":
6143 +ildouble: 1
6144 +ldouble: 1
6145 +
6146 +# cosh_towardzero
6147 +Test "cosh_towardzero (22) == 1792456423.065795780980053377632656584997":
6148 +float: 1
6149 +ifloat: 1
6150 +ildouble: 2
6151 +ldouble: 2
6152 +Test "cosh_towardzero (23) == 4872401723.124451300068625740569997090344":
6153 +float: 1
6154 +ifloat: 1
6155 +ildouble: 1
6156 +ldouble: 1
6157 +Test "cosh_towardzero (24) == 13244561064.92173614708845674912733665919":
6158 +float: 1
6159 +ifloat: 1
6160 +ildouble: 1
6161 +ldouble: 1
6162 +
6163 +# cosh_upward
6164 +Test "cosh_upward (23) == 4872401723.124451300068625740569997090344":
6165 +ildouble: 1
6166 +ldouble: 1
6167
6168 # cpow
6169 Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
6170 float: 1
6171 ifloat: 1
6172 -ldouble: 1
6173 ildouble: 1
6174 +ldouble: 1
6175 Test "Imaginary part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
6176 float: 1
6177 ifloat: 1
6178 @@ -363,9 +451,9 @@ ildouble: 1
6179 ldouble: 1
6180 Test "Real part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i":
6181 double: 1
6182 -float: 5
6183 +float: 4
6184 idouble: 1
6185 -ifloat: 5
6186 +ifloat: 4
6187 Test "Imaginary part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i":
6188 float: 2
6189 ifloat: 2
6190 @@ -383,22 +471,11 @@ ldouble: 1
6191 Test "Real part of: csin (0.75 + 1.25 i) == 1.28722291002649188575873510790565441 + 1.17210635989270256101081285116138863 i":
6192 ildouble: 1
6193 ldouble: 1
6194 -Test "Imaginary part of: csin (0.75 + 1.25 i) == 1.28722291002649188575873510790565441 + 1.17210635989270256101081285116138863 i":
6195 -float: 1
6196 -ifloat: 1
6197 -Test "Imaginary part of: csin (-2 - 3 i) == -9.15449914691142957346729954460983256 + 4.16890695996656435075481305885375484 i":
6198 -double: 1
6199 -idouble: 1
6200
6201 # csinh
6202 -Test "Real part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i":
6203 -double: 1
6204 -idouble: 1
6205 Test "Imaginary part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i":
6206 double: 1
6207 idouble: 1
6208 -ildouble: 2
6209 -ldouble: 2
6210 Test "Real part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i":
6211 float: 1
6212 ifloat: 1
6213 @@ -418,37 +495,31 @@ ifloat: 1
6214
6215 # ctan
6216 Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
6217 -double: 1
6218 -idouble: 1
6219 -ildouble: 439
6220 -ldouble: 439
6221 +ildouble: 1
6222 +ldouble: 1
6223 Test "Imaginary part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
6224 -float: 1
6225 -ifloat: 1
6226 -ildouble: 2
6227 -ldouble: 2
6228 +ildouble: 1
6229 +ldouble: 1
6230 Test "Real part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i":
6231 ildouble: 1
6232 ldouble: 1
6233 Test "Imaginary part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i":
6234 double: 1
6235 -float: 1
6236 idouble: 1
6237 -ifloat: 1
6238 ildouble: 3
6239 ldouble: 3
6240
6241 # ctanh
6242 Test "Real part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
6243 -float: 2
6244 -ifloat: 2
6245 -ildouble: 5
6246 -ldouble: 5
6247 double: 1
6248 +float: 2
6249 idouble: 1
6250 +ifloat: 2
6251 +ildouble: 3
6252 +ldouble: 3
6253 Test "Imaginary part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
6254 -ildouble: 25
6255 -ldouble: 25
6256 +ildouble: 1
6257 +ldouble: 1
6258 Test "Imaginary part of: ctanh (0 + pi/4 i) == 0.0 + 1.0 i":
6259 float: 1
6260 ifloat: 1
6261 @@ -456,10 +527,10 @@ Test "Real part of: ctanh (0.75 + 1.25 i
6262 double: 1
6263 idouble: 1
6264 Test "Imaginary part of: ctanh (0.75 + 1.25 i) == 1.37260757053378320258048606571226857 + 0.385795952609750664177596760720790220 i":
6265 -ildouble: 1
6266 -ldouble: 1
6267 double: 1
6268 idouble: 1
6269 +ildouble: 1
6270 +ldouble: 1
6271
6272 # erf
6273 Test "erf (1.25) == 0.922900128256458230136523481197281140":
6274 @@ -481,26 +552,61 @@ ldouble: 1
6275
6276 # exp10
6277 Test "exp10 (-1) == 0.1":
6278 -ildouble: 1
6279 -ldouble: 1
6280 -float: 1
6281 -ifloat: 1
6282 double: 2
6283 -idouble: 2
6284 -Test "exp10 (0.75) == 5.62341325190349080394951039776481231":
6285 -ildouble: 2
6286 -ldouble: 2
6287 float: 1
6288 +idouble: 2
6289 ifloat: 1
6290 +ildouble: 1
6291 +ldouble: 1
6292 +Test "exp10 (0.75) == 5.62341325190349080394951039776481231":
6293 double: 1
6294 +float: 1
6295 idouble: 1
6296 +ifloat: 1
6297 +ildouble: 1
6298 +ldouble: 1
6299 Test "exp10 (3) == 1000":
6300 -ildouble: 8
6301 -ldouble: 8
6302 -float: 2
6303 -ifloat: 2
6304 double: 6
6305 +float: 2
6306 idouble: 6
6307 +ifloat: 2
6308 +ildouble: 3
6309 +ldouble: 3
6310 +
6311 +# exp_downward
6312 +Test "exp_downward (1) == e":
6313 +ildouble: 1
6314 +ldouble: 1
6315 +Test "exp_downward (2) == e^2":
6316 +float: 1
6317 +ifloat: 1
6318 +ildouble: 2
6319 +ldouble: 2
6320 +Test "exp_downward (3) == e^3":
6321 +float: 1
6322 +ifloat: 1
6323 +ildouble: 1
6324 +ldouble: 1
6325 +
6326 +# exp_towardzero
6327 +Test "exp_towardzero (1) == e":
6328 +ildouble: 1
6329 +ldouble: 1
6330 +Test "exp_towardzero (2) == e^2":
6331 +float: 1
6332 +ifloat: 1
6333 +ildouble: 2
6334 +ldouble: 2
6335 +Test "exp_towardzero (3) == e^3":
6336 +float: 1
6337 +ifloat: 1
6338 +ildouble: 1
6339 +ldouble: 1
6340 +
6341 +# exp_upward
6342 +Test "exp_upward (1) == e":
6343 +float: 1
6344 +ifloat: 1
6345
6346 # expm1
6347 Test "expm1 (0.75) == 1.11700001661267466854536981983709561":
6348 @@ -570,9 +676,7 @@ ifloat: 1
6349 ildouble: 1
6350 ldouble: 1
6351 Test "j0 (8.0) == 0.171650807137553906090869407851972001":
6352 -double: 2
6353 float: 1
6354 -idouble: 2
6355 ifloat: 1
6356
6357 # j1
6358 @@ -617,9 +721,7 @@ ifloat: 1
6359 ildouble: 1
6360 ldouble: 1
6361 Test "jn (0, 8.0) == 0.171650807137553906090869407851972001":
6362 -double: 2
6363 float: 1
6364 -idouble: 2
6365 ifloat: 1
6366 Test "jn (1, 10.0) == 0.0434727461688614366697487680258592883":
6367 float: 2
6368 @@ -714,12 +816,12 @@ ldouble: 1
6369
6370 # log10
6371 Test "log10 (0.75) == -0.124938736608299953132449886193870744":
6372 -ildouble: 1
6373 -ldouble: 1
6374 -float: 2
6375 -ifloat: 2
6376 double: 1
6377 +float: 2
6378 idouble: 1
6379 +ifloat: 2
6380 +ildouble: 1
6381 +ldouble: 1
6382 Test "log10 (e) == log10(e)":
6383 float: 1
6384 ifloat: 1
6385 @@ -731,37 +833,309 @@ Test "log1p (-0.25) == -0.28768207245178
6386 float: 1
6387 ifloat: 1
6388
6389 -# sincos
6390 -Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
6391 -double: 1
6392 -float: 1
6393 -idouble: 1
6394 -ifloat: 1
6395 -Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res":
6396 -double: 1
6397 -float: 1
6398 -idouble: 1
6399 -ifloat: 1
6400 +# pow_downward
6401 +Test "pow_downward (1.0625, 1.125) == 1.070582293028761362162622578677070098674":
6402 ildouble: 1
6403 ldouble: 1
6404 -Test "sincos (pi/2, &sin_res, &cos_res) puts 0 in cos_res":
6405 -double: 1
6406 +Test "pow_downward (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
6407 float: 1
6408 -idouble: 1
6409 ifloat: 1
6410 ildouble: 1
6411 ldouble: 1
6412 -Test "sincos (pi/6, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in cos_res":
6413 +
6414 +# pow_towardzero
6415 +Test "pow_towardzero (1.0625, 1.125) == 1.070582293028761362162622578677070098674":
6416 +ildouble: 1
6417 +ldouble: 1
6418 +Test "pow_towardzero (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
6419 +float: 1
6420 +ifloat: 1
6421 +ildouble: 1
6422 +ldouble: 1
6423 +
6424 +# pow_upward
6425 +Test "pow_upward (1.0625, 1.125) == 1.070582293028761362162622578677070098674":
6426 +float: 1
6427 +ifloat: 1
6428 +ildouble: 1
6429 +ldouble: 1
6430 +Test "pow_upward (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
6431 +ildouble: 1
6432 +ldouble: 1
6433 +
6434 +# sin_downward
6435 +Test "sin_downward (1) == 0.8414709848078965066525023216302989996226":
6436 +ildouble: 1
6437 +ldouble: 1
6438 +Test "sin_downward (10) == -0.5440211108893698134047476618513772816836":
6439 +float: 1
6440 +ifloat: 1
6441 +ildouble: 1
6442 +ldouble: 1
6443 +Test "sin_downward (3) == 0.1411200080598672221007448028081102798469":
6444 +float: 1
6445 +ifloat: 1
6446 +ildouble: 1
6447 +ldouble: 1
6448 +Test "sin_downward (4) == -0.7568024953079282513726390945118290941359":
6449 +ildouble: 1
6450 +ldouble: 1
6451 +Test "sin_downward (5) == -0.9589242746631384688931544061559939733525":
6452 +float: 1
6453 +ifloat: 1
6454 +ildouble: 1
6455 +ldouble: 1
6456 +Test "sin_downward (6) == -0.2794154981989258728115554466118947596280":
6457 +float: 1
6458 +ifloat: 1
6459 +Test "sin_downward (7) == 0.6569865987187890903969990915936351779369":
6460 +ildouble: 1
6461 +ldouble: 1
6462 +Test "sin_downward (8) == 0.9893582466233817778081235982452886721164":
6463 +ildouble: 1
6464 +ldouble: 1
6465 +Test "sin_downward (9) == 0.4121184852417565697562725663524351793439":
6466 +ildouble: 1
6467 +ldouble: 1
6468 +
6469 +# sin_tonearest
6470 +Test "sin_tonearest (1) == 0.8414709848078965066525023216302989996226":
6471 +float: 1
6472 +ifloat: 1
6473 +Test "sin_tonearest (10) == -0.5440211108893698134047476618513772816836":
6474 +ildouble: 1
6475 +ldouble: 1
6476 +Test "sin_tonearest (4) == -0.7568024953079282513726390945118290941359":
6477 +ildouble: 1
6478 +ldouble: 1
6479 +Test "sin_tonearest (9) == 0.4121184852417565697562725663524351793439":
6480 +ildouble: 1
6481 +ldouble: 1
6482 +
6483 +# sin_towardzero
6484 +Test "sin_towardzero (1) == 0.8414709848078965066525023216302989996226":
6485 float: 1
6486 ifloat: 1
6487 -Test "sincos (0.80190127184058835, &sin_res, &cos_res) puts 0.69534156199418473 in cos_res":
6488 +ildouble: 1
6489 +ldouble: 1
6490 +Test "sin_towardzero (10) == -0.5440211108893698134047476618513772816836":
6491 +float: 1
6492 +ifloat: 1
6493 +Test "sin_towardzero (3) == 0.1411200080598672221007448028081102798469":
6494 +ildouble: 1
6495 +ldouble: 1
6496 +Test "sin_towardzero (4) == -0.7568024953079282513726390945118290941359":
6497 +float: 1
6498 +ifloat: 1
6499 +Test "sin_towardzero (5) == -0.9589242746631384688931544061559939733525":
6500 +float: 1
6501 +ifloat: 1
6502 +Test "sin_towardzero (6) == -0.2794154981989258728115554466118947596280":
6503 +ildouble: 1
6504 +ldouble: 1
6505 +Test "sin_towardzero (7) == 0.6569865987187890903969990915936351779369":
6506 +ildouble: 1
6507 +ldouble: 1
6508 +Test "sin_towardzero (8) == 0.9893582466233817778081235982452886721164":
6509 +ildouble: 1
6510 +ldouble: 1
6511 +Test "sin_towardzero (9) == 0.4121184852417565697562725663524351793439":
6512 +float: 1
6513 +ifloat: 1
6514 +ildouble: 1
6515 +ldouble: 1
6516 +
6517 +# sin_upward
6518 +Test "sin_upward (1) == 0.8414709848078965066525023216302989996226":
6519 +float: 1
6520 +ifloat: 1
6521 +Test "sin_upward (2) == 0.9092974268256816953960198659117448427023":
6522 +float: 2
6523 +ifloat: 2
6524 +ildouble: 1
6525 +ldouble: 1
6526 +Test "sin_upward (4) == -0.7568024953079282513726390945118290941359":
6527 +float: 1
6528 +ifloat: 1
6529 +Test "sin_upward (6) == -0.2794154981989258728115554466118947596280":
6530 +ildouble: 1
6531 +ldouble: 1
6532 +Test "sin_upward (9) == 0.4121184852417565697562725663524351793439":
6533 +float: 1
6534 +ifloat: 1
6535 +
6536 +# sincos
6537 +Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
6538 double: 1
6539 idouble: 1
6540 -
6541 -# tan
6542 -Test "tan (pi/4) == 1":
6543 +Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res":
6544 double: 1
6545 +float: 1
6546 idouble: 1
6547 +ifloat: 1
6548 +ildouble: 1
6549 +ldouble: 1
6550 +Test "sincos (pi/6, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in cos_res":
6551 +float: 1
6552 +ifloat: 1
6553 +
6554 +# sinh_downward
6555 +Test "sinh_downward (22) == 1792456423.065795780701106568345764104225":
6556 +float: 1
6557 +ifloat: 1
6558 +ildouble: 4
6559 +ldouble: 4
6560 +Test "sinh_downward (23) == 4872401723.124451299966006944252978187305":
6561 +float: 1
6562 +ifloat: 1
6563 +Test "sinh_downward (24) == 13244561064.92173614705070540368454568168":
6564 +float: 1
6565 +ifloat: 1
6566 +ildouble: 5
6567 +ldouble: 5
6568 +
6569 +# sinh_tonearest
6570 +Test "sinh_tonearest (22) == 1792456423.065795780701106568345764104225":
6571 +ildouble: 3
6572 +ldouble: 3
6573 +Test "sinh_tonearest (23) == 4872401723.124451299966006944252978187305":
6574 +ildouble: 1
6575 +ldouble: 1
6576 +Test "sinh_tonearest (24) == 13244561064.92173614705070540368454568168":
6577 +ildouble: 6
6578 +ldouble: 6
6579 +
6580 +# sinh_towardzero
6581 +Test "sinh_towardzero (22) == 1792456423.065795780701106568345764104225":
6582 +float: 1
6583 +ifloat: 1
6584 +ildouble: 4
6585 +ldouble: 4
6586 +Test "sinh_towardzero (23) == 4872401723.124451299966006944252978187305":
6587 +float: 1
6588 +ifloat: 1
6589 +Test "sinh_towardzero (24) == 13244561064.92173614705070540368454568168":
6590 +float: 1
6591 +ifloat: 1
6592 +ildouble: 5
6593 +ldouble: 5
6594 +
6595 +# sinh_upward
6596 +Test "sinh_upward (22) == 1792456423.065795780701106568345764104225":
6597 +ildouble: 16
6598 +ldouble: 16
6599 +Test "sinh_upward (23) == 4872401723.124451299966006944252978187305":
6600 +ildouble: 27
6601 +ldouble: 27
6602 +Test "sinh_upward (24) == 13244561064.92173614705070540368454568168":
6603 +ildouble: 7
6604 +ldouble: 7
6605 +
6606 +# tan_downward
6607 +Test "tan_downward (1) == 1.5574077246549022305069748074583601730873":
6608 +float: 1
6609 +ifloat: 1
6610 +Test "tan_downward (10) == 0.6483608274590866712591249330098086768169":
6611 +float: 1
6612 +ifloat: 1
6613 +Test "tan_downward (2) == -2.1850398632615189916433061023136825434320":
6614 +float: 1
6615 +ifloat: 1
6616 +Test "tan_downward (4) == 1.1578212823495775831373424182673239231198":
6617 +ildouble: 1
6618 +ldouble: 1
6619 +Test "tan_downward (5) == -3.3805150062465856369827058794473439087096":
6620 +ildouble: 1
6621 +ldouble: 1
6622 +Test "tan_downward (6) == -0.2910061913847491570536995888681755428312":
6623 +float: 1
6624 +ifloat: 1
6625 +Test "tan_downward (8) == -6.7997114552203786999252627596086333648814":
6626 +float: 1
6627 +ifloat: 1
6628 +ildouble: 1
6629 +ldouble: 1
6630 +Test "tan_downward (9) == -0.4523156594418098405903708757987855343087":
6631 +float: 1
6632 +ifloat: 1
6633 +
6634 +# tan_tonearest
6635 +Test "tan_tonearest (6) == -0.2910061913847491570536995888681755428312":
6636 +ildouble: 1
6637 +ldouble: 1
6638 +Test "tan_tonearest (8) == -6.7997114552203786999252627596086333648814":
6639 +ildouble: 1
6640 +ldouble: 1
6641 +Test "tan_tonearest (9) == -0.4523156594418098405903708757987855343087":
6642 +ildouble: 1
6643 +ldouble: 1
6644 +
6645 +# tan_towardzero
6646 +Test "tan_towardzero (10) == 0.6483608274590866712591249330098086768169":
6647 +float: 1
6648 +ifloat: 1
6649 +Test "tan_towardzero (2) == -2.1850398632615189916433061023136825434320":
6650 +ildouble: 1
6651 +ldouble: 1
6652 +Test "tan_towardzero (3) == -0.1425465430742778052956354105339134932261":
6653 +float: 1
6654 +ifloat: 1
6655 +ildouble: 1
6656 +ldouble: 1
6657 +Test "tan_towardzero (4) == 1.1578212823495775831373424182673239231198":
6658 +float: 1
6659 +ifloat: 1
6660 +ildouble: 1
6661 +ldouble: 1
6662 +Test "tan_towardzero (5) == -3.3805150062465856369827058794473439087096":
6663 +float: 1
6664 +ifloat: 1
6665 +Test "tan_towardzero (6) == -0.2910061913847491570536995888681755428312":
6666 +ildouble: 1
6667 +ldouble: 1
6668 +Test "tan_towardzero (8) == -6.7997114552203786999252627596086333648814":
6669 +ildouble: 2
6670 +ldouble: 2
6671 +Test "tan_towardzero (9) == -0.4523156594418098405903708757987855343087":
6672 +float: 1
6673 +ifloat: 1
6674 +ildouble: 1
6675 +ldouble: 1
6676 +
6677 +# tan_upward
6678 +Test "tan_upward (1) == 1.5574077246549022305069748074583601730873":
6679 +float: 1
6680 +ifloat: 1
6681 +ildouble: 1
6682 +ldouble: 1
6683 +Test "tan_upward (10) == 0.6483608274590866712591249330098086768169":
6684 +float: 1
6685 +ifloat: 1
6686 +ildouble: 1
6687 +ldouble: 1
6688 +Test "tan_upward (2) == -2.1850398632615189916433061023136825434320":
6689 +ildouble: 1
6690 +ldouble: 1
6691 +Test "tan_upward (3) == -0.1425465430742778052956354105339134932261":
6692 +float: 1
6693 +ifloat: 1
6694 +ildouble: 1
6695 +ldouble: 1
6696 +Test "tan_upward (5) == -3.3805150062465856369827058794473439087096":
6697 +float: 1
6698 +ifloat: 1
6699 +Test "tan_upward (6) == -0.2910061913847491570536995888681755428312":
6700 +ildouble: 1
6701 +ldouble: 1
6702 +Test "tan_upward (7) == 0.8714479827243187364564508896003135663222":
6703 +ildouble: 1
6704 +ldouble: 1
6705 +Test "tan_upward (8) == -6.7997114552203786999252627596086333648814":
6706 +ildouble: 2
6707 +ldouble: 2
6708 +Test "tan_upward (9) == -0.4523156594418098405903708757987855343087":
6709 +ildouble: 1
6710 +ldouble: 1
6711
6712 # tgamma
6713 Test "tgamma (-0.5) == -2 sqrt (pi)":
6714 @@ -779,9 +1153,6 @@ double: 1
6715 float: 1
6716 idouble: 1
6717 ifloat: 1
6718 -Test "tgamma (4) == 6":
6719 -ildouble: 1
6720 -ldouble: 1
6721
6722 # y0
6723 Test "y0 (0.125) == -1.38968062514384052915582277745018693":
6724 @@ -960,27 +1331,17 @@ ildouble: 1
6725 ldouble: 1
6726
6727 Function: Imaginary part of "cacos":
6728 -float: 1
6729 -ifloat: 1
6730 ildouble: 2
6731 ldouble: 2
6732
6733 Function: Real part of "cacosh":
6734 -double: 1
6735 -float: 7
6736 -idouble: 1
6737 -ifloat: 7
6738 -ildouble: 6
6739 -ldouble: 6
6740 -
6741 -Function: Imaginary part of "cacosh":
6742 -double: 1
6743 -float: 3
6744 -idouble: 1
6745 -ifloat: 3
6746 ildouble: 1
6747 ldouble: 1
6748
6749 +Function: Imaginary part of "cacosh":
6750 +float: 1
6751 +ifloat: 1
6752 +
6753 Function: Real part of "casin":
6754 double: 1
6755 float: 1
6756 @@ -990,8 +1351,6 @@ ildouble: 2
6757 ldouble: 2
6758
6759 Function: Imaginary part of "casin":
6760 -float: 1
6761 -ifloat: 1
6762 ildouble: 2
6763 ldouble: 2
6764
6765 @@ -1011,10 +1370,6 @@ ifloat: 6
6766 ildouble: 5
6767 ldouble: 5
6768
6769 -Function: Real part of "catan":
6770 -float: 4
6771 -ifloat: 4
6772 -
6773 Function: Imaginary part of "catan":
6774 double: 1
6775 float: 1
6776 @@ -1027,10 +1382,6 @@ idouble: 4
6777 ildouble: 1
6778 ldouble: 1
6779
6780 -Function: Imaginary part of "catanh":
6781 -float: 6
6782 -ifloat: 6
6783 -
6784 Function: "cbrt":
6785 double: 1
6786 idouble: 1
6787 @@ -1058,9 +1409,7 @@ idouble: 1
6788 ifloat: 1
6789
6790 Function: Imaginary part of "ccosh":
6791 -double: 1
6792 float: 1
6793 -idouble: 1
6794 ifloat: 1
6795 ildouble: 1
6796 ldouble: 1
6797 @@ -1081,25 +1430,17 @@ ifloat: 1
6798 ildouble: 1
6799 ldouble: 1
6800
6801 -Function: Imaginary part of "clog":
6802 -float: 3
6803 -ifloat: 3
6804 -
6805 Function: Real part of "clog10":
6806 -double: 1
6807 float: 1
6808 -idouble: 1
6809 ifloat: 1
6810 ildouble: 1
6811 ldouble: 1
6812
6813 Function: Imaginary part of "clog10":
6814 double: 1
6815 -float: 5
6816 +float: 1
6817 idouble: 1
6818 -ifloat: 5
6819 -ildouble: 1
6820 -ldouble: 1
6821 +ifloat: 1
6822
6823 Function: "cos":
6824 double: 2
6825 @@ -1109,11 +1450,55 @@ ifloat: 1
6826 ildouble: 1
6827 ldouble: 1
6828
6829 +Function: "cos_downward":
6830 +float: 1
6831 +ifloat: 1
6832 +ildouble: 1
6833 +ldouble: 1
6834 +
6835 +Function: "cos_tonearest":
6836 +float: 1
6837 +ifloat: 1
6838 +ildouble: 1
6839 +ldouble: 1
6840 +
6841 +Function: "cos_towardzero":
6842 +float: 1
6843 +ifloat: 1
6844 +ildouble: 1
6845 +ldouble: 1
6846 +
6847 +Function: "cos_upward":
6848 +float: 2
6849 +ifloat: 2
6850 +ildouble: 1
6851 +ldouble: 1
6852 +
6853 +Function: "cosh_downward":
6854 +float: 1
6855 +ifloat: 1
6856 +ildouble: 2
6857 +ldouble: 2
6858 +
6859 +Function: "cosh_tonearest":
6860 +ildouble: 1
6861 +ldouble: 1
6862 +
6863 +Function: "cosh_towardzero":
6864 +float: 1
6865 +ifloat: 1
6866 +ildouble: 2
6867 +ldouble: 2
6868 +
6869 +Function: "cosh_upward":
6870 +ildouble: 1
6871 +ldouble: 1
6872 +
6873 Function: Real part of "cpow":
6874 double: 2
6875 -float: 5
6876 +float: 4
6877 idouble: 2
6878 -ifloat: 5
6879 +ifloat: 4
6880 ildouble: 5
6881 ldouble: 5
6882
6883 @@ -1129,16 +1514,8 @@ Function: Real part of "csin":
6884 ildouble: 1
6885 ldouble: 1
6886
6887 -Function: Imaginary part of "csin":
6888 -double: 1
6889 -float: 1
6890 -idouble: 1
6891 -ifloat: 1
6892 -
6893 Function: Real part of "csinh":
6894 -double: 1
6895 float: 1
6896 -idouble: 1
6897 ifloat: 1
6898 ildouble: 1
6899 ldouble: 1
6900 @@ -1148,24 +1525,18 @@ double: 1
6901 float: 1
6902 idouble: 1
6903 ifloat: 1
6904 -ildouble: 2
6905 -ldouble: 2
6906
6907 Function: Real part of "csqrt":
6908 float: 1
6909 ifloat: 1
6910
6911 Function: Real part of "ctan":
6912 -double: 1
6913 -idouble: 1
6914 -ildouble: 439
6915 -ldouble: 439
6916 +ildouble: 1
6917 +ldouble: 1
6918
6919 Function: Imaginary part of "ctan":
6920 double: 1
6921 -float: 1
6922 idouble: 1
6923 -ifloat: 1
6924 ildouble: 3
6925 ldouble: 3
6926
6927 @@ -1174,16 +1545,16 @@ double: 1
6928 float: 2
6929 idouble: 1
6930 ifloat: 2
6931 -ildouble: 5
6932 -ldouble: 5
6933 +ildouble: 3
6934 +ldouble: 3
6935
6936 Function: Imaginary part of "ctanh":
6937 -float: 1
6938 -ifloat: 1
6939 -ildouble: 25
6940 -ldouble: 25
6941 double: 1
6942 +float: 1
6943 idouble: 1
6944 +ifloat: 1
6945 +ildouble: 1
6946 +ldouble: 1
6947
6948 Function: "erf":
6949 double: 1
6950 @@ -1196,12 +1567,28 @@ ildouble: 1
6951 ldouble: 1
6952
6953 Function: "exp10":
6954 -ildouble: 8
6955 -ldouble: 8
6956 -float: 2
6957 -ifloat: 2
6958 double: 6
6959 +float: 2
6960 idouble: 6
6961 +ifloat: 2
6962 +ildouble: 3
6963 +ldouble: 3
6964 +
6965 +Function: "exp_downward":
6966 +float: 1
6967 +ifloat: 1
6968 +ildouble: 2
6969 +ldouble: 2
6970 +
6971 +Function: "exp_towardzero":
6972 +float: 1
6973 +ifloat: 1
6974 +ildouble: 2
6975 +ldouble: 2
6976 +
6977 +Function: "exp_upward":
6978 +float: 1
6979 +ifloat: 1
6980
6981 Function: "expm1":
6982 double: 1
6983 @@ -1250,17 +1637,59 @@ ildouble: 1
6984 ldouble: 1
6985
6986 Function: "log10":
6987 +double: 1
6988 float: 2
6989 +idouble: 1
6990 ifloat: 2
6991 ildouble: 1
6992 ldouble: 1
6993 -double: 1
6994 -idouble: 1
6995
6996 Function: "log1p":
6997 float: 1
6998 ifloat: 1
6999
7000 +Function: "pow_downward":
7001 +float: 1
7002 +ifloat: 1
7003 +ildouble: 1
7004 +ldouble: 1
7005 +
7006 +Function: "pow_towardzero":
7007 +float: 1
7008 +ifloat: 1
7009 +ildouble: 1
7010 +ldouble: 1
7011 +
7012 +Function: "pow_upward":
7013 +float: 1
7014 +ifloat: 1
7015 +ildouble: 1
7016 +ldouble: 1
7017 +
7018 +Function: "sin_downward":
7019 +float: 1
7020 +ifloat: 1
7021 +ildouble: 1
7022 +ldouble: 1
7023 +
7024 +Function: "sin_tonearest":
7025 +float: 1
7026 +ifloat: 1
7027 +ildouble: 1
7028 +ldouble: 1
7029 +
7030 +Function: "sin_towardzero":
7031 +float: 1
7032 +ifloat: 1
7033 +ildouble: 1
7034 +ldouble: 1
7035 +
7036 +Function: "sin_upward":
7037 +float: 2
7038 +ifloat: 2
7039 +ildouble: 1
7040 +ldouble: 1
7041 +
7042 Function: "sincos":
7043 double: 1
7044 float: 1
7045 @@ -1269,10 +1698,52 @@ ifloat: 1
7046 ildouble: 1
7047 ldouble: 1
7048
7049 +Function: "sinh_downward":
7050 +float: 1
7051 +ifloat: 1
7052 +ildouble: 5
7053 +ldouble: 5
7054 +
7055 +Function: "sinh_tonearest":
7056 +ildouble: 6
7057 +ldouble: 6
7058 +
7059 +Function: "sinh_towardzero":
7060 +float: 1
7061 +ifloat: 1
7062 +ildouble: 5
7063 +ldouble: 5
7064 +
7065 +Function: "sinh_upward":
7066 +ildouble: 27
7067 +ldouble: 27
7068 +
7069 Function: "tan":
7070 double: 1
7071 idouble: 1
7072
7073 +Function: "tan_downward":
7074 +float: 1
7075 +ifloat: 1
7076 +ildouble: 1
7077 +ldouble: 1
7078 +
7079 +Function: "tan_tonearest":
7080 +ildouble: 1
7081 +ldouble: 1
7082 +
7083 +Function: "tan_towardzero":
7084 +float: 1
7085 +ifloat: 1
7086 +ildouble: 2
7087 +ldouble: 2
7088 +
7089 +Function: "tan_upward":
7090 +float: 1
7091 +ifloat: 1
7092 +ildouble: 2
7093 +ldouble: 2
7094 +
7095 Function: "tgamma":
7096 double: 1
7097 float: 1
7098 diff -Nrup a/sysdeps/x86_64/fpu/math_private.h b/sysdeps/x86_64/fpu/math_private.h
7099 --- a/sysdeps/x86_64/fpu/math_private.h 2010-05-04 05:27:23.000000000 -0600
7100 +++ b/sysdeps/x86_64/fpu/math_private.h 2012-08-06 09:54:00.893929393 -0600
7101 @@ -56,3 +56,82 @@ do { \
7102 } while (0)
7103
7104 #endif
7105 +
7106 +
7107 +/* Specialized variants of the <fenv.h> interfaces which only handle
7108 + either the FPU or the SSE unit. */
7109 +#undef libc_fegetround
7110 +#define libc_fegetround() \
7111 + ({ \
7112 + unsigned int mxcsr; \
7113 + asm volatile ("stmxcsr %0" : "=m" (*&mxcsr)); \
7114 + (mxcsr & 0x6000) >> 3; \
7115 + })
7116 +#undef libc_fegetroundf
7117 +#define libc_fegetroundf() libc_fegetround ()
7118 +// #define libc_fegetroundl() fegetround ()
7119 +
7120 +#undef libc_fesetround
7121 +#define libc_fesetround(r) \
7122 + do { \
7123 + unsigned int mxcsr; \
7124 + asm ("stmxcsr %0" : "=m" (*&mxcsr)); \
7125 + mxcsr = (mxcsr & ~0x6000) | ((r) << 3); \
7126 + asm volatile ("ldmxcsr %0" : : "m" (*&mxcsr)); \
7127 + } while (0)
7128 +#undef libc_fesetroundf
7129 +#define libc_fesetroundf(r) libc_fesetround (r)
7130 +// #define libc_fesetroundl(r) (void) fesetround (r)
7131 +
7132 +#undef libc_feholdexcept
7133 +#define libc_feholdexcept(e) \
7134 + do { \
7135 + unsigned int mxcsr; \
7136 + asm ("stmxcsr %0" : "=m" (*&mxcsr)); \
7137 + (e)->__mxcsr = mxcsr; \
7138 + mxcsr = (mxcsr | 0x1f80) & ~0x3f; \
7139 + asm volatile ("ldmxcsr %0" : : "m" (*&mxcsr)); \
7140 + } while (0)
7141 +#undef libc_feholdexceptf
7142 +#define libc_feholdexceptf(e) libc_feholdexcept (e)
7143 +// #define libc_feholdexceptl(e) (void) feholdexcept (e)
7144 +
7145 +#undef libc_feholdexcept_setround
7146 +#define libc_feholdexcept_setround(e, r) \
7147 + do { \
7148 + unsigned int mxcsr; \
7149 + asm ("stmxcsr %0" : "=m" (*&mxcsr)); \
7150 + (e)->__mxcsr = mxcsr; \
7151 + mxcsr = ((mxcsr | 0x1f80) & ~0x603f) | ((r) << 3); \
7152 + asm volatile ("ldmxcsr %0" : : "m" (*&mxcsr)); \
7153 + } while (0)
7154 +#undef libc_feholdexcept_setroundf
7155 +#define libc_feholdexcept_setroundf(e, r) libc_feholdexcept_setround (e, r)
7156 +// #define libc_feholdexcept_setroundl(e, r) ...
7157 +
7158 +#undef libc_fetestexcept
7159 +#define libc_fetestexcept(e) \
7160 + ({ unsigned int mxcsr; asm volatile ("stmxcsr %0" : "=m" (*&mxcsr)); \
7161 + mxcsr & (e) & FE_ALL_EXCEPT; })
7162 +#undef libc_fetestexceptf
7163 +#define libc_fetestexceptf(e) libc_fetestexcept (e)
7164 +// #define libc_fetestexceptl(e) fetestexcept (e)
7165 +
7166 +#undef libc_fesetenv
7167 +#define libc_fesetenv(e) \
7168 + asm volatile ("ldmxcsr %0" : : "m" ((e)->__mxcsr))
7169 +#undef libc_fesetenvf
7170 +#define libc_fesetenvf(e) libc_fesetenv (e)
7171 +// #define libc_fesetenvl(e) (void) fesetenv (e)
7172 +
7173 +#undef libc_feupdateenv
7174 +#define libc_feupdateenv(e) \
7175 + do { \
7176 + unsigned int mxcsr; \
7177 + asm volatile ("stmxcsr %0" : "=m" (*&mxcsr)); \
7178 + asm volatile ("ldmxcsr %0" : : "m" ((e)->__mxcsr)); \
7179 + feraiseexcept (mxcsr & FE_ALL_EXCEPT); \
7180 + } while (0)
7181 +#undef libc_feupdateenvf
7182 +#define libc_feupdateenvf(e) libc_feupdateenv (e)
7183 +// #define libc_feupdateenvl(e) (void) feupdateenv (e)