1 /* Miscellaneous tests which don't fit anywhere else.
2 Copyright (C) 2000 Free Software Foundation, Inc.
3 This file is part of the GNU C Library.
5 The GNU C Library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public License as
7 published by the Free Software Foundation; either version 2 of the
8 License, or (at your option) any later version.
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details.
15 You should have received a copy of the GNU Library General Public
16 License along with the GNU C Library; see the file COPYING.LIB. If not,
17 write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. */
32 #ifndef NO_LONG_DOUBLE
34 long double x
= 0x100000001ll
+ (long double) 0.5;
39 if (q
!= (long double) 0x100000001ll
|| r
!= 0.5)
41 printf ("modfl (%Lg, ...) failed\n", x
);
46 # if __GNUC__ >= 3 || __GNUC_MINOR__ >= 96
54 # if LDBL_MANT_DIG == 64
55 m
= 0xf.fffffffffffffffp
-4L;
56 # elif LDBL_MANT_DIG == 113
57 m
= 0x1.ffffffffffffffffffffffffffffp
-1L;
59 # error "Please adjust"
62 for (i
= LDBL_MAX_EXP
, x
= LDBL_MAX
; i
>= LDBL_MIN_EXP
; --i
, x
/= 2.0L)
69 printf ("mantissa incorrect: %.20La\n", r
);
75 printf ("exponent wrong %d (%.20Lg)\n", e
, x
);
87 long double r
= frexpl (LDBL_MIN
* LDBL_EPSILON
, &e
);
91 printf ("frexpl (LDBL_MIN * LDBL_EPSILON, ...): mantissa wrong: %Lg\n",
97 printf ("frexpl (LDBL_MIN * LDBL_EPSILON, ...): exponent wrong: %d\n",
106 double x
= 0x100000001ll
+ (double) 0.5;
111 if (q
!= (double) 0x100000001ll
|| r
!= 0.5)
113 printf ("modf (%g, ...) failed\n", x
);
119 union ieee754_float v1
;
120 union ieee754_float v2
;
124 if (fpclassify (f
) != FP_NORMAL
)
126 printf ("fpclassify (FLT_MIN) failed: %d\n", fpclassify (f
));
129 f
= nextafterf (f
, FLT_MIN
/ 2.0f
);
130 if (fpclassify (f
) != FP_SUBNORMAL
)
132 printf ("fpclassify (FLT_MIN-epsilon) failed: %d\n", fpclassify (f
));
135 v2
.f
= f
= nextafterf (f
, FLT_MIN
);
136 if (fpclassify (f
) != FP_NORMAL
)
138 printf ("fpclassify (FLT_MIN-epsilon+epsilon) failed: %d\n",
143 if (v1
.ieee
.mantissa
!= v2
.ieee
.mantissa
)
145 printf ("FLT_MIN: mantissa differs: %8x vs %8x\n",
146 v1
.ieee
.mantissa
, v2
.ieee
.mantissa
);
149 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
151 printf ("FLT_MIN: exponent differs: %4x vs %4x\n",
152 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
155 if (v1
.ieee
.negative
!= v2
.ieee
.negative
)
157 printf ("FLT_MIN: negative differs: %d vs %d\n",
158 v1
.ieee
.negative
, v2
.ieee
.negative
);
163 if (fpclassify (f
) != FP_NORMAL
)
165 printf ("fpclassify (-FLT_MIN) failed: %d\n", fpclassify (f
));
168 f
= nextafterf (f
, -FLT_MIN
/ 2.0f
);
169 if (fpclassify (f
) != FP_SUBNORMAL
)
171 printf ("fpclassify (-FLT_MIN-epsilon) failed: %d\n", fpclassify (f
));
174 v2
.f
= f
= nextafterf (f
, -FLT_MIN
);
175 if (fpclassify (f
) != FP_NORMAL
)
177 printf ("fpclassify (-FLT_MIN-epsilon+epsilon) failed: %d\n",
182 if (v1
.ieee
.mantissa
!= v2
.ieee
.mantissa
)
184 printf ("-FLT_MIN: mantissa differs: %8x vs %8x\n",
185 v1
.ieee
.mantissa
, v2
.ieee
.mantissa
);
188 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
190 printf ("-FLT_MIN: exponent differs: %4x vs %4x\n",
191 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
194 if (v1
.ieee
.negative
!= v2
.ieee
.negative
)
196 printf ("-FLT_MIN: negative differs: %d vs %d\n",
197 v1
.ieee
.negative
, v2
.ieee
.negative
);
202 if (fpclassify (f
) != FP_NORMAL
)
204 printf ("fpclassify (FLT_MAX) failed: %d\n", fpclassify (f
));
207 f
= nextafterf (f
, INFINITY
);
208 if (fpclassify (f
) != FP_INFINITE
)
210 printf ("fpclassify (FLT_MAX+epsilon) failed: %d\n", fpclassify (f
));
215 if (fpclassify (f
) != FP_NORMAL
)
217 printf ("fpclassify (-FLT_MAX) failed: %d\n", fpclassify (f
));
220 f
= nextafterf (f
, -INFINITY
);
221 if (fpclassify (f
) != FP_INFINITE
)
223 printf ("fpclassify (-FLT_MAX-epsilon) failed: %d\n", fpclassify (f
));
228 f
= nextafterf (f
, 0.0);
229 v2
.f
= f
= nextafterf (f
, 1.0);
231 if (v1
.ieee
.mantissa
!= v2
.ieee
.mantissa
)
233 printf ("0.0625f down: mantissa differs: %8x vs %8x\n",
234 v1
.ieee
.mantissa
, v2
.ieee
.mantissa
);
237 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
239 printf ("0.0625f down: exponent differs: %4x vs %4x\n",
240 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
243 if (v1
.ieee
.negative
!= v2
.ieee
.negative
)
245 printf ("0.0625f down: negative differs: %d vs %d\n",
246 v1
.ieee
.negative
, v2
.ieee
.negative
);
251 f
= nextafterf (f
, 1.0);
252 v2
.f
= f
= nextafterf (f
, 0.0);
254 if (v1
.ieee
.mantissa
!= v2
.ieee
.mantissa
)
256 printf ("0.0625f up: mantissa differs: %8x vs %8x\n",
257 v1
.ieee
.mantissa
, v2
.ieee
.mantissa
);
260 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
262 printf ("0.0625f up: exponent differs: %4x vs %4x\n",
263 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
266 if (v1
.ieee
.negative
!= v2
.ieee
.negative
)
268 printf ("0.0625f up: negative differs: %d vs %d\n",
269 v1
.ieee
.negative
, v2
.ieee
.negative
);
274 f
= nextafterf (f
, 0.0);
275 v2
.f
= f
= nextafterf (f
, -1.0);
277 if (v1
.ieee
.mantissa
!= v2
.ieee
.mantissa
)
279 printf ("-0.0625f up: mantissa differs: %8x vs %8x\n",
280 v1
.ieee
.mantissa
, v2
.ieee
.mantissa
);
283 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
285 printf ("-0.0625f up: exponent differs: %4x vs %4x\n",
286 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
289 if (v1
.ieee
.negative
!= v2
.ieee
.negative
)
291 printf ("-0.0625f up: negative differs: %d vs %d\n",
292 v1
.ieee
.negative
, v2
.ieee
.negative
);
297 f
= nextafterf (f
, -1.0);
298 v2
.f
= f
= nextafterf (f
, 0.0);
300 if (v1
.ieee
.mantissa
!= v2
.ieee
.mantissa
)
302 printf ("-0.0625f down: mantissa differs: %8x vs %8x\n",
303 v1
.ieee
.mantissa
, v2
.ieee
.mantissa
);
306 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
308 printf ("-0.0625f down: exponent differs: %4x vs %4x\n",
309 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
312 if (v1
.ieee
.negative
!= v2
.ieee
.negative
)
314 printf ("-0.0625f down: negative differs: %d vs %d\n",
315 v1
.ieee
.negative
, v2
.ieee
.negative
);
320 f
= nextafterf (f
, 1.0);
321 v2
.f
= nextafterf (f
, -1.0);
323 if (v1
.ieee
.mantissa
!= v2
.ieee
.mantissa
)
325 printf ("0.0f up: mantissa differs: %8x vs %8x\n",
326 v1
.ieee
.mantissa
, v2
.ieee
.mantissa
);
329 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
331 printf ("0.0f up: exponent differs: %4x vs %4x\n",
332 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
335 if (0 != v2
.ieee
.negative
)
337 printf ("0.0f up: negative differs: 0 vs %d\n",
343 f
= nextafterf (f
, -1.0);
344 v2
.f
= nextafterf (f
, 1.0);
346 if (v1
.ieee
.mantissa
!= v2
.ieee
.mantissa
)
348 printf ("0.0f down: mantissa differs: %8x vs %8x\n",
349 v1
.ieee
.mantissa
, v2
.ieee
.mantissa
);
352 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
354 printf ("0.0f down: exponent differs: %4x vs %4x\n",
355 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
358 if (1 != v2
.ieee
.negative
)
360 printf ("0.0f down: negative differs: 1 vs %d\n",
367 union ieee754_double v1
;
368 union ieee754_double v2
;
372 if (fpclassify (d
) != FP_NORMAL
)
374 printf ("fpclassify (DBL_MIN) failed: %d\n", fpclassify (d
));
377 d
= nextafter (d
, DBL_MIN
/ 2.0);
378 if (fpclassify (d
) != FP_SUBNORMAL
)
380 printf ("fpclassify (DBL_MIN-epsilon) failed: %d\n", fpclassify (d
));
383 v2
.d
= d
= nextafter (d
, DBL_MIN
);
384 if (fpclassify (d
) != FP_NORMAL
)
386 printf ("fpclassify (DBL_MIN-epsilon+epsilon) failed: %d\n",
391 if (v1
.ieee
.mantissa0
!= v2
.ieee
.mantissa0
)
393 printf ("DBL_MIN: mantissa0 differs: %8x vs %8x\n",
394 v1
.ieee
.mantissa0
, v2
.ieee
.mantissa0
);
397 if (v1
.ieee
.mantissa1
!= v2
.ieee
.mantissa1
)
399 printf ("DBL_MIN: mantissa1 differs: %8x vs %8x\n",
400 v1
.ieee
.mantissa1
, v2
.ieee
.mantissa1
);
403 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
405 printf ("DBL_MIN: exponent differs: %4x vs %4x\n",
406 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
409 if (v1
.ieee
.negative
!= v2
.ieee
.negative
)
411 printf ("DBL_MIN: negative differs: %d vs %d\n",
412 v1
.ieee
.negative
, v2
.ieee
.negative
);
417 if (fpclassify (d
) != FP_NORMAL
)
419 printf ("fpclassify (-DBL_MIN) failed: %d\n", fpclassify (d
));
422 d
= nextafter (d
, -DBL_MIN
/ 2.0);
423 if (fpclassify (d
) != FP_SUBNORMAL
)
425 printf ("fpclassify (-DBL_MIN-epsilon) failed: %d\n", fpclassify (d
));
428 v2
.d
= d
= nextafter (d
, -DBL_MIN
);
429 if (fpclassify (d
) != FP_NORMAL
)
431 printf ("fpclassify (-DBL_MIN-epsilon+epsilon) failed: %d\n",
436 if (v1
.ieee
.mantissa0
!= v2
.ieee
.mantissa0
)
438 printf ("-DBL_MIN: mantissa0 differs: %8x vs %8x\n",
439 v1
.ieee
.mantissa0
, v2
.ieee
.mantissa0
);
442 if (v1
.ieee
.mantissa1
!= v2
.ieee
.mantissa1
)
444 printf ("-DBL_MIN: mantissa1 differs: %8x vs %8x\n",
445 v1
.ieee
.mantissa1
, v2
.ieee
.mantissa1
);
448 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
450 printf ("-DBL_MIN: exponent differs: %4x vs %4x\n",
451 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
454 if (v1
.ieee
.negative
!= v2
.ieee
.negative
)
456 printf ("-DBL_MIN: negative differs: %d vs %d\n",
457 v1
.ieee
.negative
, v2
.ieee
.negative
);
462 if (fpclassify (d
) != FP_NORMAL
)
464 printf ("fpclassify (DBL_MAX) failed: %d\n", fpclassify (d
));
467 d
= nextafter (d
, INFINITY
);
468 if (fpclassify (d
) != FP_INFINITE
)
470 printf ("fpclassify (DBL_MAX+epsilon) failed: %d\n", fpclassify (d
));
475 if (fpclassify (d
) != FP_NORMAL
)
477 printf ("fpclassify (-DBL_MAX) failed: %d\n", fpclassify (d
));
480 d
= nextafter (d
, -INFINITY
);
481 if (fpclassify (d
) != FP_INFINITE
)
483 printf ("fpclassify (-DBL_MAX-epsilon) failed: %d\n", fpclassify (d
));
488 d
= nextafter (d
, 0.0);
489 v2
.d
= d
= nextafter (d
, 1.0);
491 if (v1
.ieee
.mantissa0
!= v2
.ieee
.mantissa0
)
493 printf ("0.0625 down: mantissa0 differs: %8x vs %8x\n",
494 v1
.ieee
.mantissa0
, v2
.ieee
.mantissa0
);
497 if (v1
.ieee
.mantissa1
!= v2
.ieee
.mantissa1
)
499 printf ("0.0625 down: mantissa1 differs: %8x vs %8x\n",
500 v1
.ieee
.mantissa1
, v2
.ieee
.mantissa1
);
503 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
505 printf ("0.0625 down: exponent differs: %4x vs %4x\n",
506 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
509 if (v1
.ieee
.negative
!= v2
.ieee
.negative
)
511 printf ("0.0625 down: negative differs: %d vs %d\n",
512 v1
.ieee
.negative
, v2
.ieee
.negative
);
517 d
= nextafter (d
, 1.0);
518 v2
.d
= d
= nextafter (d
, 0.0);
520 if (v1
.ieee
.mantissa0
!= v2
.ieee
.mantissa0
)
522 printf ("0.0625 up: mantissa0 differs: %8x vs %8x\n",
523 v1
.ieee
.mantissa0
, v2
.ieee
.mantissa0
);
526 if (v1
.ieee
.mantissa1
!= v2
.ieee
.mantissa1
)
528 printf ("0.0625 up: mantissa1 differs: %8x vs %8x\n",
529 v1
.ieee
.mantissa1
, v2
.ieee
.mantissa1
);
532 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
534 printf ("0.0625 up: exponent differs: %4x vs %4x\n",
535 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
538 if (v1
.ieee
.negative
!= v2
.ieee
.negative
)
540 printf ("0.0625 up: negative differs: %d vs %d\n",
541 v1
.ieee
.negative
, v2
.ieee
.negative
);
546 d
= nextafter (d
, 0.0);
547 v2
.d
= d
= nextafter (d
, -1.0);
549 if (v1
.ieee
.mantissa0
!= v2
.ieee
.mantissa0
)
551 printf ("-0.0625 up: mantissa0 differs: %8x vs %8x\n",
552 v1
.ieee
.mantissa0
, v2
.ieee
.mantissa0
);
555 if (v1
.ieee
.mantissa1
!= v2
.ieee
.mantissa1
)
557 printf ("-0.0625 up: mantissa1 differs: %8x vs %8x\n",
558 v1
.ieee
.mantissa1
, v2
.ieee
.mantissa1
);
561 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
563 printf ("-0.0625 up: exponent differs: %4x vs %4x\n",
564 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
567 if (v1
.ieee
.negative
!= v2
.ieee
.negative
)
569 printf ("-0.0625 up: negative differs: %d vs %d\n",
570 v1
.ieee
.negative
, v2
.ieee
.negative
);
575 d
= nextafter (d
, -1.0);
576 v2
.d
= d
= nextafter (d
, 0.0);
578 if (v1
.ieee
.mantissa0
!= v2
.ieee
.mantissa0
)
580 printf ("-0.0625 down: mantissa0 differs: %8x vs %8x\n",
581 v1
.ieee
.mantissa0
, v2
.ieee
.mantissa0
);
584 if (v1
.ieee
.mantissa1
!= v2
.ieee
.mantissa1
)
586 printf ("-0.0625 down: mantissa1 differs: %8x vs %8x\n",
587 v1
.ieee
.mantissa1
, v2
.ieee
.mantissa1
);
590 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
592 printf ("-0.0625 down: exponent differs: %4x vs %4x\n",
593 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
596 if (v1
.ieee
.negative
!= v2
.ieee
.negative
)
598 printf ("-0.0625 down: negative differs: %d vs %d\n",
599 v1
.ieee
.negative
, v2
.ieee
.negative
);
604 d
= nextafter (d
, 1.0);
605 v2
.d
= nextafter (d
, -1.0);
607 if (v1
.ieee
.mantissa0
!= v2
.ieee
.mantissa0
)
609 printf ("0.0 up: mantissa0 differs: %8x vs %8x\n",
610 v1
.ieee
.mantissa0
, v2
.ieee
.mantissa0
);
613 if (v1
.ieee
.mantissa1
!= v2
.ieee
.mantissa1
)
615 printf ("0.0 up: mantissa1 differs: %8x vs %8x\n",
616 v1
.ieee
.mantissa1
, v2
.ieee
.mantissa1
);
619 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
621 printf ("0.0 up: exponent differs: %4x vs %4x\n",
622 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
625 if (0 != v2
.ieee
.negative
)
627 printf ("0.0 up: negative differs: 0 vs %d\n",
633 d
= nextafter (d
, -1.0);
634 v2
.d
= nextafter (d
, 1.0);
636 if (v1
.ieee
.mantissa0
!= v2
.ieee
.mantissa0
)
638 printf ("0.0 down: mantissa0 differs: %8x vs %8x\n",
639 v1
.ieee
.mantissa0
, v2
.ieee
.mantissa0
);
642 if (v1
.ieee
.mantissa1
!= v2
.ieee
.mantissa1
)
644 printf ("0.0 down: mantissa1 differs: %8x vs %8x\n",
645 v1
.ieee
.mantissa1
, v2
.ieee
.mantissa1
);
648 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
650 printf ("0.0 down: exponent differs: %4x vs %4x\n",
651 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
654 if (1 != v2
.ieee
.negative
)
656 printf ("0.0 down: negative differs: 1 vs %d\n",
662 #ifndef NO_LONG_DOUBLE
664 union ieee854_long_double v1
;
665 union ieee854_long_double v2
;
668 v1
.d
= ld
= LDBL_MIN
;
669 if (fpclassify (ld
) != FP_NORMAL
)
671 printf ("fpclassify (LDBL_MIN) failed: %d\n", fpclassify (ld
));
674 ld
= nextafterl (ld
, LDBL_MIN
/ 2.0);
675 if (fpclassify (ld
) != FP_SUBNORMAL
)
677 printf ("fpclassify (LDBL_MIN-epsilon) failed: %d (%La)\n",
678 fpclassify (ld
), ld
);
681 v2
.d
= ld
= nextafterl (ld
, LDBL_MIN
);
682 if (fpclassify (ld
) != FP_NORMAL
)
684 printf ("fpclassify (LDBL_MIN-epsilon+epsilon) failed: %d (%La)\n",
685 fpclassify (ld
), ld
);
689 if (v1
.ieee
.mantissa0
!= v2
.ieee
.mantissa0
)
691 printf ("LDBL_MIN: mantissa0 differs: %8x vs %8x\n",
692 v1
.ieee
.mantissa0
, v2
.ieee
.mantissa0
);
695 if (v1
.ieee
.mantissa1
!= v2
.ieee
.mantissa1
)
697 printf ("LDBL_MIN: mantissa1 differs: %8x vs %8x\n",
698 v1
.ieee
.mantissa1
, v2
.ieee
.mantissa1
);
701 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
703 printf ("LDBL_MIN: exponent differs: %4x vs %4x\n",
704 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
707 if (v1
.ieee
.negative
!= v2
.ieee
.negative
)
709 printf ("LDBL_MIN: negative differs: %d vs %d\n",
710 v1
.ieee
.negative
, v2
.ieee
.negative
);
714 v1
.d
= ld
= -LDBL_MIN
;
715 if (fpclassify (ld
) != FP_NORMAL
)
717 printf ("fpclassify (-LDBL_MIN) failed: %d\n", fpclassify (ld
));
720 ld
= nextafterl (ld
, -LDBL_MIN
/ 2.0);
721 if (fpclassify (ld
) != FP_SUBNORMAL
)
723 printf ("fpclassify (-LDBL_MIN-epsilon) failed: %d (%La)\n",
724 fpclassify (ld
), ld
);
727 v2
.d
= ld
= nextafterl (ld
, -LDBL_MIN
);
728 if (fpclassify (ld
) != FP_NORMAL
)
730 printf ("fpclassify (-LDBL_MIN-epsilon+epsilon) failed: %d (%La)\n",
731 fpclassify (ld
), ld
);
735 if (v1
.ieee
.mantissa0
!= v2
.ieee
.mantissa0
)
737 printf ("-LDBL_MIN: mantissa0 differs: %8x vs %8x\n",
738 v1
.ieee
.mantissa0
, v2
.ieee
.mantissa0
);
741 if (v1
.ieee
.mantissa1
!= v2
.ieee
.mantissa1
)
743 printf ("-LDBL_MIN: mantissa1 differs: %8x vs %8x\n",
744 v1
.ieee
.mantissa1
, v2
.ieee
.mantissa1
);
747 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
749 printf ("-LDBL_MIN: exponent differs: %4x vs %4x\n",
750 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
753 if (v1
.ieee
.negative
!= v2
.ieee
.negative
)
755 printf ("-LDBL_MIN: negative differs: %d vs %d\n",
756 v1
.ieee
.negative
, v2
.ieee
.negative
);
761 if (fpclassify (ld
) != FP_NORMAL
)
763 printf ("fpclassify (LDBL_MAX) failed: %d\n", fpclassify (ld
));
766 ld
= nextafterl (ld
, INFINITY
);
767 if (fpclassify (ld
) != FP_INFINITE
)
769 printf ("fpclassify (LDBL_MAX+epsilon) failed: %d\n", fpclassify (ld
));
774 if (fpclassify (ld
) != FP_NORMAL
)
776 printf ("fpclassify (-LDBL_MAX) failed: %d\n", fpclassify (ld
));
779 ld
= nextafterl (ld
, -INFINITY
);
780 if (fpclassify (ld
) != FP_INFINITE
)
782 printf ("fpclassify (-LDBL_MAX-epsilon) failed: %d\n",
788 ld
= nextafterl (ld
, 0.0);
789 v2
.d
= ld
= nextafterl (ld
, 1.0);
791 if (v1
.ieee
.mantissa0
!= v2
.ieee
.mantissa0
)
793 printf ("0.0625L down: mantissa0 differs: %8x vs %8x\n",
794 v1
.ieee
.mantissa0
, v2
.ieee
.mantissa0
);
797 if (v1
.ieee
.mantissa1
!= v2
.ieee
.mantissa1
)
799 printf ("0.0625L down: mantissa1 differs: %8x vs %8x\n",
800 v1
.ieee
.mantissa1
, v2
.ieee
.mantissa1
);
803 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
805 printf ("0.0625L down: exponent differs: %4x vs %4x\n",
806 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
809 if (v1
.ieee
.negative
!= v2
.ieee
.negative
)
811 printf ("0.0625L down: negative differs: %d vs %d\n",
812 v1
.ieee
.negative
, v2
.ieee
.negative
);
817 ld
= nextafterl (ld
, 1.0);
818 v2
.d
= ld
= nextafterl (ld
, 0.0);
820 if (v1
.ieee
.mantissa0
!= v2
.ieee
.mantissa0
)
822 printf ("0.0625L up: mantissa0 differs: %8x vs %8x\n",
823 v1
.ieee
.mantissa0
, v2
.ieee
.mantissa0
);
826 if (v1
.ieee
.mantissa1
!= v2
.ieee
.mantissa1
)
828 printf ("0.0625L up: mantissa1 differs: %8x vs %8x\n",
829 v1
.ieee
.mantissa1
, v2
.ieee
.mantissa1
);
832 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
834 printf ("0.0625L up: exponent differs: %4x vs %4x\n",
835 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
838 if (v1
.ieee
.negative
!= v2
.ieee
.negative
)
840 printf ("0.0625L up: negative differs: %d vs %d\n",
841 v1
.ieee
.negative
, v2
.ieee
.negative
);
846 ld
= nextafterl (ld
, 0.0);
847 v2
.d
= ld
= nextafterl (ld
, -1.0);
849 if (v1
.ieee
.mantissa0
!= v2
.ieee
.mantissa0
)
851 printf ("-0.0625L up: mantissa0 differs: %8x vs %8x\n",
852 v1
.ieee
.mantissa0
, v2
.ieee
.mantissa0
);
855 if (v1
.ieee
.mantissa1
!= v2
.ieee
.mantissa1
)
857 printf ("-0.0625L up: mantissa1 differs: %8x vs %8x\n",
858 v1
.ieee
.mantissa1
, v2
.ieee
.mantissa1
);
861 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
863 printf ("-0.0625L up: exponent differs: %4x vs %4x\n",
864 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
867 if (v1
.ieee
.negative
!= v2
.ieee
.negative
)
869 printf ("-0.0625L up: negative differs: %d vs %d\n",
870 v1
.ieee
.negative
, v2
.ieee
.negative
);
875 ld
= nextafterl (ld
, -1.0);
876 v2
.d
= ld
= nextafterl (ld
, 0.0);
878 if (v1
.ieee
.mantissa0
!= v2
.ieee
.mantissa0
)
880 printf ("-0.0625L down: mantissa0 differs: %8x vs %8x\n",
881 v1
.ieee
.mantissa0
, v2
.ieee
.mantissa0
);
884 if (v1
.ieee
.mantissa1
!= v2
.ieee
.mantissa1
)
886 printf ("-0.0625L down: mantissa1 differs: %8x vs %8x\n",
887 v1
.ieee
.mantissa1
, v2
.ieee
.mantissa1
);
890 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
892 printf ("-0.0625L down: exponent differs: %4x vs %4x\n",
893 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
896 if (v1
.ieee
.negative
!= v2
.ieee
.negative
)
898 printf ("-0.0625L down: negative differs: %d vs %d\n",
899 v1
.ieee
.negative
, v2
.ieee
.negative
);
904 ld
= nextafterl (ld
, 1.0);
905 v2
.d
= nextafterl (ld
, -1.0);
907 if (v1
.ieee
.mantissa0
!= v2
.ieee
.mantissa0
)
909 printf ("0.0L up: mantissa0 differs: %8x vs %8x\n",
910 v1
.ieee
.mantissa0
, v2
.ieee
.mantissa0
);
913 if (v1
.ieee
.mantissa1
!= v2
.ieee
.mantissa1
)
915 printf ("0.0L up: mantissa1 differs: %8x vs %8x\n",
916 v1
.ieee
.mantissa1
, v2
.ieee
.mantissa1
);
919 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
921 printf ("0.0L up: exponent differs: %4x vs %4x\n",
922 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
925 if (0 != v2
.ieee
.negative
)
927 printf ("0.0L up: negative differs: 0 vs %d\n",
933 ld
= nextafterl (ld
, -1.0);
934 v2
.d
= nextafterl (ld
, 1.0);
936 if (v1
.ieee
.mantissa0
!= v2
.ieee
.mantissa0
)
938 printf ("0.0L down: mantissa0 differs: %8x vs %8x\n",
939 v1
.ieee
.mantissa0
, v2
.ieee
.mantissa0
);
942 if (v1
.ieee
.mantissa1
!= v2
.ieee
.mantissa1
)
944 printf ("0.0L down: mantissa1 differs: %8x vs %8x\n",
945 v1
.ieee
.mantissa1
, v2
.ieee
.mantissa1
);
948 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
950 printf ("0.0L down: exponent differs: %4x vs %4x\n",
951 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
954 if (1 != v2
.ieee
.negative
)
956 printf ("0.0L down: negative differs: 1 vs %d\n",
963 if (! isnormal (FLT_MIN
))
965 puts ("isnormal (FLT_MIN) failed");
968 if (! isnormal (DBL_MIN
))
970 puts ("isnormal (DBL_MIN) failed");
973 #ifndef NO_LONG_DOUBLE
974 if (! isnormal (LDBL_MIN
))
976 puts ("isnormal (LDBL_MIN) failed");
982 /* This is a test for the strange long doubles in x86 FPUs. */
989 { .b
= { 0, 0, 0, 0, 0, 0, 0, 0x80, 0, 0 } };
991 if (fpclassify (u
.d
) != FP_NORMAL
)
993 printf ("fpclassify (0x00008000000000000000) failed: %d (%Lg)\n",
994 fpclassify (u
.d
), u
.d
);
999 /* Special NaNs in x86 long double. Test for scalbl. */
1006 { .b
= { 0, 1, 0, 0, 0, 0, 0, 0xc0, 0xff, 0x7f } };
1009 r
= scalbl (u
.d
, 0.0);
1012 puts ("scalbl(NaN, 0) does not return NaN");
1015 else if (memcmp (&r
, &u
.d
, sizeof (double)) != 0)
1017 puts ("scalbl(NaN, 0) does not return the same NaN");
1023 #ifndef NO_LONG_DOUBLE
1027 feclearexcept (FE_ALL_EXCEPT
);
1028 r
= scalbl (LDBL_MIN
, 2147483647);
1031 puts ("scalbl (LDBL_MIN, 2147483647) does not return Inf");
1034 else if (signbit (r
) != 0)
1036 puts ("scalbl (LDBL_MIN, 2147483647) returns -Inf");
1039 else if (fetestexcept (FE_UNDERFLOW
))
1041 puts ("scalbl(NaN, 0) raises underflow exception");
1045 feclearexcept (FE_ALL_EXCEPT
);
1046 r
= scalbl (LDBL_MAX
, -2147483647);
1049 puts ("scalbl (LDBL_MAX, -2147483647) does not return 0");
1052 else if (signbit (r
) != 0)
1054 puts ("scalbl (LDBL_MAX, -2147483647) returns -Inf");
1057 else if (fetestexcept (FE_OVERFLOW
))
1059 puts ("scalbl(NaN, 0) raises overflow exception");