1 /* Miscellaneous tests which don't fit anywhere else.
2 Copyright (C) 2000, 2001 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. */
33 #ifndef NO_LONG_DOUBLE
35 long double x
= 0x100000001ll
+ (long double) 0.5;
40 if (q
!= (long double) 0x100000001ll
|| r
!= 0.5)
42 printf ("modfl (%Lg, ...) failed\n", x
);
47 # if __GNUC__ >= 3 || __GNUC_MINOR__ >= 96
55 # if LDBL_MANT_DIG == 64
56 m
= 0xf.fffffffffffffffp
-4L;
57 # elif LDBL_MANT_DIG == 113
58 m
= 0x1.ffffffffffffffffffffffffffffp
-1L;
60 # error "Please adjust"
63 for (i
= LDBL_MAX_EXP
, x
= LDBL_MAX
; i
>= LDBL_MIN_EXP
; --i
, x
/= 2.0L)
70 printf ("mantissa incorrect: %.20La\n", r
);
76 printf ("exponent wrong %d (%.20Lg)\n", e
, x
);
88 long double r
= frexpl (LDBL_MIN
* LDBL_EPSILON
, &e
);
92 printf ("frexpl (LDBL_MIN * LDBL_EPSILON, ...): mantissa wrong: %Lg\n",
98 printf ("frexpl (LDBL_MIN * LDBL_EPSILON, ...): exponent wrong: %d\n",
107 double x
= 0x100000001ll
+ (double) 0.5;
112 if (q
!= (double) 0x100000001ll
|| r
!= 0.5)
114 printf ("modf (%g, ...) failed\n", x
);
120 union ieee754_float v1
;
121 union ieee754_float v2
;
125 if (fpclassify (f
) != FP_NORMAL
)
127 printf ("fpclassify (FLT_MIN) failed: %d\n", fpclassify (f
));
130 f
= nextafterf (f
, FLT_MIN
/ 2.0f
);
131 if (fpclassify (f
) != FP_SUBNORMAL
)
133 printf ("fpclassify (FLT_MIN-epsilon) failed: %d\n", fpclassify (f
));
136 v2
.f
= f
= nextafterf (f
, FLT_MIN
);
137 if (fpclassify (f
) != FP_NORMAL
)
139 printf ("fpclassify (FLT_MIN-epsilon+epsilon) failed: %d\n",
144 if (v1
.ieee
.mantissa
!= v2
.ieee
.mantissa
)
146 printf ("FLT_MIN: mantissa differs: %8x vs %8x\n",
147 v1
.ieee
.mantissa
, v2
.ieee
.mantissa
);
150 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
152 printf ("FLT_MIN: exponent differs: %4x vs %4x\n",
153 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
156 if (v1
.ieee
.negative
!= v2
.ieee
.negative
)
158 printf ("FLT_MIN: negative differs: %d vs %d\n",
159 v1
.ieee
.negative
, v2
.ieee
.negative
);
164 if (fpclassify (f
) != FP_NORMAL
)
166 printf ("fpclassify (-FLT_MIN) failed: %d\n", fpclassify (f
));
169 f
= nextafterf (f
, -FLT_MIN
/ 2.0f
);
170 if (fpclassify (f
) != FP_SUBNORMAL
)
172 printf ("fpclassify (-FLT_MIN-epsilon) failed: %d\n", fpclassify (f
));
175 v2
.f
= f
= nextafterf (f
, -FLT_MIN
);
176 if (fpclassify (f
) != FP_NORMAL
)
178 printf ("fpclassify (-FLT_MIN-epsilon+epsilon) failed: %d\n",
183 if (v1
.ieee
.mantissa
!= v2
.ieee
.mantissa
)
185 printf ("-FLT_MIN: mantissa differs: %8x vs %8x\n",
186 v1
.ieee
.mantissa
, v2
.ieee
.mantissa
);
189 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
191 printf ("-FLT_MIN: exponent differs: %4x vs %4x\n",
192 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
195 if (v1
.ieee
.negative
!= v2
.ieee
.negative
)
197 printf ("-FLT_MIN: negative differs: %d vs %d\n",
198 v1
.ieee
.negative
, v2
.ieee
.negative
);
203 if (fpclassify (f
) != FP_NORMAL
)
205 printf ("fpclassify (FLT_MAX) failed: %d\n", fpclassify (f
));
208 f
= nextafterf (f
, INFINITY
);
209 if (fpclassify (f
) != FP_INFINITE
)
211 printf ("fpclassify (FLT_MAX+epsilon) failed: %d\n", fpclassify (f
));
216 if (fpclassify (f
) != FP_NORMAL
)
218 printf ("fpclassify (-FLT_MAX) failed: %d\n", fpclassify (f
));
221 f
= nextafterf (f
, -INFINITY
);
222 if (fpclassify (f
) != FP_INFINITE
)
224 printf ("fpclassify (-FLT_MAX-epsilon) failed: %d\n", fpclassify (f
));
229 f
= nextafterf (f
, 0.0);
230 v2
.f
= f
= nextafterf (f
, 1.0);
232 if (v1
.ieee
.mantissa
!= v2
.ieee
.mantissa
)
234 printf ("0.0625f down: mantissa differs: %8x vs %8x\n",
235 v1
.ieee
.mantissa
, v2
.ieee
.mantissa
);
238 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
240 printf ("0.0625f down: exponent differs: %4x vs %4x\n",
241 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
244 if (v1
.ieee
.negative
!= v2
.ieee
.negative
)
246 printf ("0.0625f down: negative differs: %d vs %d\n",
247 v1
.ieee
.negative
, v2
.ieee
.negative
);
252 f
= nextafterf (f
, 1.0);
253 v2
.f
= f
= nextafterf (f
, 0.0);
255 if (v1
.ieee
.mantissa
!= v2
.ieee
.mantissa
)
257 printf ("0.0625f up: mantissa differs: %8x vs %8x\n",
258 v1
.ieee
.mantissa
, v2
.ieee
.mantissa
);
261 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
263 printf ("0.0625f up: exponent differs: %4x vs %4x\n",
264 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
267 if (v1
.ieee
.negative
!= v2
.ieee
.negative
)
269 printf ("0.0625f up: negative differs: %d vs %d\n",
270 v1
.ieee
.negative
, v2
.ieee
.negative
);
275 f
= nextafterf (f
, 0.0);
276 v2
.f
= f
= nextafterf (f
, -1.0);
278 if (v1
.ieee
.mantissa
!= v2
.ieee
.mantissa
)
280 printf ("-0.0625f up: mantissa differs: %8x vs %8x\n",
281 v1
.ieee
.mantissa
, v2
.ieee
.mantissa
);
284 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
286 printf ("-0.0625f up: exponent differs: %4x vs %4x\n",
287 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
290 if (v1
.ieee
.negative
!= v2
.ieee
.negative
)
292 printf ("-0.0625f up: negative differs: %d vs %d\n",
293 v1
.ieee
.negative
, v2
.ieee
.negative
);
298 f
= nextafterf (f
, -1.0);
299 v2
.f
= f
= nextafterf (f
, 0.0);
301 if (v1
.ieee
.mantissa
!= v2
.ieee
.mantissa
)
303 printf ("-0.0625f down: mantissa differs: %8x vs %8x\n",
304 v1
.ieee
.mantissa
, v2
.ieee
.mantissa
);
307 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
309 printf ("-0.0625f down: exponent differs: %4x vs %4x\n",
310 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
313 if (v1
.ieee
.negative
!= v2
.ieee
.negative
)
315 printf ("-0.0625f down: negative differs: %d vs %d\n",
316 v1
.ieee
.negative
, v2
.ieee
.negative
);
321 f
= nextafterf (f
, 1.0);
322 v2
.f
= nextafterf (f
, -1.0);
324 if (v1
.ieee
.mantissa
!= v2
.ieee
.mantissa
)
326 printf ("0.0f up: mantissa differs: %8x vs %8x\n",
327 v1
.ieee
.mantissa
, v2
.ieee
.mantissa
);
330 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
332 printf ("0.0f up: exponent differs: %4x vs %4x\n",
333 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
336 if (0 != v2
.ieee
.negative
)
338 printf ("0.0f up: negative differs: 0 vs %d\n",
344 f
= nextafterf (f
, -1.0);
345 v2
.f
= nextafterf (f
, 1.0);
347 if (v1
.ieee
.mantissa
!= v2
.ieee
.mantissa
)
349 printf ("0.0f down: mantissa differs: %8x vs %8x\n",
350 v1
.ieee
.mantissa
, v2
.ieee
.mantissa
);
353 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
355 printf ("0.0f down: exponent differs: %4x vs %4x\n",
356 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
359 if (1 != v2
.ieee
.negative
)
361 printf ("0.0f down: negative differs: 1 vs %d\n",
368 union ieee754_double v1
;
369 union ieee754_double v2
;
373 if (fpclassify (d
) != FP_NORMAL
)
375 printf ("fpclassify (DBL_MIN) failed: %d\n", fpclassify (d
));
378 d
= nextafter (d
, DBL_MIN
/ 2.0);
379 if (fpclassify (d
) != FP_SUBNORMAL
)
381 printf ("fpclassify (DBL_MIN-epsilon) failed: %d\n", fpclassify (d
));
384 v2
.d
= d
= nextafter (d
, DBL_MIN
);
385 if (fpclassify (d
) != FP_NORMAL
)
387 printf ("fpclassify (DBL_MIN-epsilon+epsilon) failed: %d\n",
392 if (v1
.ieee
.mantissa0
!= v2
.ieee
.mantissa0
)
394 printf ("DBL_MIN: mantissa0 differs: %8x vs %8x\n",
395 v1
.ieee
.mantissa0
, v2
.ieee
.mantissa0
);
398 if (v1
.ieee
.mantissa1
!= v2
.ieee
.mantissa1
)
400 printf ("DBL_MIN: mantissa1 differs: %8x vs %8x\n",
401 v1
.ieee
.mantissa1
, v2
.ieee
.mantissa1
);
404 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
406 printf ("DBL_MIN: exponent differs: %4x vs %4x\n",
407 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
410 if (v1
.ieee
.negative
!= v2
.ieee
.negative
)
412 printf ("DBL_MIN: negative differs: %d vs %d\n",
413 v1
.ieee
.negative
, v2
.ieee
.negative
);
418 if (fpclassify (d
) != FP_NORMAL
)
420 printf ("fpclassify (-DBL_MIN) failed: %d\n", fpclassify (d
));
423 d
= nextafter (d
, -DBL_MIN
/ 2.0);
424 if (fpclassify (d
) != FP_SUBNORMAL
)
426 printf ("fpclassify (-DBL_MIN-epsilon) failed: %d\n", fpclassify (d
));
429 v2
.d
= d
= nextafter (d
, -DBL_MIN
);
430 if (fpclassify (d
) != FP_NORMAL
)
432 printf ("fpclassify (-DBL_MIN-epsilon+epsilon) failed: %d\n",
437 if (v1
.ieee
.mantissa0
!= v2
.ieee
.mantissa0
)
439 printf ("-DBL_MIN: mantissa0 differs: %8x vs %8x\n",
440 v1
.ieee
.mantissa0
, v2
.ieee
.mantissa0
);
443 if (v1
.ieee
.mantissa1
!= v2
.ieee
.mantissa1
)
445 printf ("-DBL_MIN: mantissa1 differs: %8x vs %8x\n",
446 v1
.ieee
.mantissa1
, v2
.ieee
.mantissa1
);
449 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
451 printf ("-DBL_MIN: exponent differs: %4x vs %4x\n",
452 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
455 if (v1
.ieee
.negative
!= v2
.ieee
.negative
)
457 printf ("-DBL_MIN: negative differs: %d vs %d\n",
458 v1
.ieee
.negative
, v2
.ieee
.negative
);
463 if (fpclassify (d
) != FP_NORMAL
)
465 printf ("fpclassify (DBL_MAX) failed: %d\n", fpclassify (d
));
468 d
= nextafter (d
, INFINITY
);
469 if (fpclassify (d
) != FP_INFINITE
)
471 printf ("fpclassify (DBL_MAX+epsilon) failed: %d\n", fpclassify (d
));
476 if (fpclassify (d
) != FP_NORMAL
)
478 printf ("fpclassify (-DBL_MAX) failed: %d\n", fpclassify (d
));
481 d
= nextafter (d
, -INFINITY
);
482 if (fpclassify (d
) != FP_INFINITE
)
484 printf ("fpclassify (-DBL_MAX-epsilon) failed: %d\n", fpclassify (d
));
489 d
= nextafter (d
, 0.0);
490 v2
.d
= d
= nextafter (d
, 1.0);
492 if (v1
.ieee
.mantissa0
!= v2
.ieee
.mantissa0
)
494 printf ("0.0625 down: mantissa0 differs: %8x vs %8x\n",
495 v1
.ieee
.mantissa0
, v2
.ieee
.mantissa0
);
498 if (v1
.ieee
.mantissa1
!= v2
.ieee
.mantissa1
)
500 printf ("0.0625 down: mantissa1 differs: %8x vs %8x\n",
501 v1
.ieee
.mantissa1
, v2
.ieee
.mantissa1
);
504 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
506 printf ("0.0625 down: exponent differs: %4x vs %4x\n",
507 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
510 if (v1
.ieee
.negative
!= v2
.ieee
.negative
)
512 printf ("0.0625 down: negative differs: %d vs %d\n",
513 v1
.ieee
.negative
, v2
.ieee
.negative
);
518 d
= nextafter (d
, 1.0);
519 v2
.d
= d
= nextafter (d
, 0.0);
521 if (v1
.ieee
.mantissa0
!= v2
.ieee
.mantissa0
)
523 printf ("0.0625 up: mantissa0 differs: %8x vs %8x\n",
524 v1
.ieee
.mantissa0
, v2
.ieee
.mantissa0
);
527 if (v1
.ieee
.mantissa1
!= v2
.ieee
.mantissa1
)
529 printf ("0.0625 up: mantissa1 differs: %8x vs %8x\n",
530 v1
.ieee
.mantissa1
, v2
.ieee
.mantissa1
);
533 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
535 printf ("0.0625 up: exponent differs: %4x vs %4x\n",
536 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
539 if (v1
.ieee
.negative
!= v2
.ieee
.negative
)
541 printf ("0.0625 up: negative differs: %d vs %d\n",
542 v1
.ieee
.negative
, v2
.ieee
.negative
);
547 d
= nextafter (d
, 0.0);
548 v2
.d
= d
= nextafter (d
, -1.0);
550 if (v1
.ieee
.mantissa0
!= v2
.ieee
.mantissa0
)
552 printf ("-0.0625 up: mantissa0 differs: %8x vs %8x\n",
553 v1
.ieee
.mantissa0
, v2
.ieee
.mantissa0
);
556 if (v1
.ieee
.mantissa1
!= v2
.ieee
.mantissa1
)
558 printf ("-0.0625 up: mantissa1 differs: %8x vs %8x\n",
559 v1
.ieee
.mantissa1
, v2
.ieee
.mantissa1
);
562 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
564 printf ("-0.0625 up: exponent differs: %4x vs %4x\n",
565 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
568 if (v1
.ieee
.negative
!= v2
.ieee
.negative
)
570 printf ("-0.0625 up: negative differs: %d vs %d\n",
571 v1
.ieee
.negative
, v2
.ieee
.negative
);
576 d
= nextafter (d
, -1.0);
577 v2
.d
= d
= nextafter (d
, 0.0);
579 if (v1
.ieee
.mantissa0
!= v2
.ieee
.mantissa0
)
581 printf ("-0.0625 down: mantissa0 differs: %8x vs %8x\n",
582 v1
.ieee
.mantissa0
, v2
.ieee
.mantissa0
);
585 if (v1
.ieee
.mantissa1
!= v2
.ieee
.mantissa1
)
587 printf ("-0.0625 down: mantissa1 differs: %8x vs %8x\n",
588 v1
.ieee
.mantissa1
, v2
.ieee
.mantissa1
);
591 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
593 printf ("-0.0625 down: exponent differs: %4x vs %4x\n",
594 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
597 if (v1
.ieee
.negative
!= v2
.ieee
.negative
)
599 printf ("-0.0625 down: negative differs: %d vs %d\n",
600 v1
.ieee
.negative
, v2
.ieee
.negative
);
605 d
= nextafter (d
, 1.0);
606 v2
.d
= nextafter (d
, -1.0);
608 if (v1
.ieee
.mantissa0
!= v2
.ieee
.mantissa0
)
610 printf ("0.0 up: mantissa0 differs: %8x vs %8x\n",
611 v1
.ieee
.mantissa0
, v2
.ieee
.mantissa0
);
614 if (v1
.ieee
.mantissa1
!= v2
.ieee
.mantissa1
)
616 printf ("0.0 up: mantissa1 differs: %8x vs %8x\n",
617 v1
.ieee
.mantissa1
, v2
.ieee
.mantissa1
);
620 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
622 printf ("0.0 up: exponent differs: %4x vs %4x\n",
623 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
626 if (0 != v2
.ieee
.negative
)
628 printf ("0.0 up: negative differs: 0 vs %d\n",
634 d
= nextafter (d
, -1.0);
635 v2
.d
= nextafter (d
, 1.0);
637 if (v1
.ieee
.mantissa0
!= v2
.ieee
.mantissa0
)
639 printf ("0.0 down: mantissa0 differs: %8x vs %8x\n",
640 v1
.ieee
.mantissa0
, v2
.ieee
.mantissa0
);
643 if (v1
.ieee
.mantissa1
!= v2
.ieee
.mantissa1
)
645 printf ("0.0 down: mantissa1 differs: %8x vs %8x\n",
646 v1
.ieee
.mantissa1
, v2
.ieee
.mantissa1
);
649 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
651 printf ("0.0 down: exponent differs: %4x vs %4x\n",
652 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
655 if (1 != v2
.ieee
.negative
)
657 printf ("0.0 down: negative differs: 1 vs %d\n",
663 #ifndef NO_LONG_DOUBLE
665 union ieee854_long_double v1
;
666 union ieee854_long_double v2
;
669 v1
.d
= ld
= LDBL_MIN
;
670 if (fpclassify (ld
) != FP_NORMAL
)
672 printf ("fpclassify (LDBL_MIN) failed: %d\n", fpclassify (ld
));
675 ld
= nextafterl (ld
, LDBL_MIN
/ 2.0);
676 if (fpclassify (ld
) != FP_SUBNORMAL
)
678 printf ("fpclassify (LDBL_MIN-epsilon) failed: %d (%La)\n",
679 fpclassify (ld
), ld
);
682 v2
.d
= ld
= nextafterl (ld
, LDBL_MIN
);
683 if (fpclassify (ld
) != FP_NORMAL
)
685 printf ("fpclassify (LDBL_MIN-epsilon+epsilon) failed: %d (%La)\n",
686 fpclassify (ld
), ld
);
690 if (v1
.ieee
.mantissa0
!= v2
.ieee
.mantissa0
)
692 printf ("LDBL_MIN: mantissa0 differs: %8x vs %8x\n",
693 v1
.ieee
.mantissa0
, v2
.ieee
.mantissa0
);
696 if (v1
.ieee
.mantissa1
!= v2
.ieee
.mantissa1
)
698 printf ("LDBL_MIN: mantissa1 differs: %8x vs %8x\n",
699 v1
.ieee
.mantissa1
, v2
.ieee
.mantissa1
);
702 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
704 printf ("LDBL_MIN: exponent differs: %4x vs %4x\n",
705 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
708 if (v1
.ieee
.negative
!= v2
.ieee
.negative
)
710 printf ("LDBL_MIN: negative differs: %d vs %d\n",
711 v1
.ieee
.negative
, v2
.ieee
.negative
);
715 v1
.d
= ld
= -LDBL_MIN
;
716 if (fpclassify (ld
) != FP_NORMAL
)
718 printf ("fpclassify (-LDBL_MIN) failed: %d\n", fpclassify (ld
));
721 ld
= nextafterl (ld
, -LDBL_MIN
/ 2.0);
722 if (fpclassify (ld
) != FP_SUBNORMAL
)
724 printf ("fpclassify (-LDBL_MIN-epsilon) failed: %d (%La)\n",
725 fpclassify (ld
), ld
);
728 v2
.d
= ld
= nextafterl (ld
, -LDBL_MIN
);
729 if (fpclassify (ld
) != FP_NORMAL
)
731 printf ("fpclassify (-LDBL_MIN-epsilon+epsilon) failed: %d (%La)\n",
732 fpclassify (ld
), ld
);
736 if (v1
.ieee
.mantissa0
!= v2
.ieee
.mantissa0
)
738 printf ("-LDBL_MIN: mantissa0 differs: %8x vs %8x\n",
739 v1
.ieee
.mantissa0
, v2
.ieee
.mantissa0
);
742 if (v1
.ieee
.mantissa1
!= v2
.ieee
.mantissa1
)
744 printf ("-LDBL_MIN: mantissa1 differs: %8x vs %8x\n",
745 v1
.ieee
.mantissa1
, v2
.ieee
.mantissa1
);
748 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
750 printf ("-LDBL_MIN: exponent differs: %4x vs %4x\n",
751 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
754 if (v1
.ieee
.negative
!= v2
.ieee
.negative
)
756 printf ("-LDBL_MIN: negative differs: %d vs %d\n",
757 v1
.ieee
.negative
, v2
.ieee
.negative
);
762 if (fpclassify (ld
) != FP_NORMAL
)
764 printf ("fpclassify (LDBL_MAX) failed: %d\n", fpclassify (ld
));
767 ld
= nextafterl (ld
, INFINITY
);
768 if (fpclassify (ld
) != FP_INFINITE
)
770 printf ("fpclassify (LDBL_MAX+epsilon) failed: %d\n", fpclassify (ld
));
775 if (fpclassify (ld
) != FP_NORMAL
)
777 printf ("fpclassify (-LDBL_MAX) failed: %d\n", fpclassify (ld
));
780 ld
= nextafterl (ld
, -INFINITY
);
781 if (fpclassify (ld
) != FP_INFINITE
)
783 printf ("fpclassify (-LDBL_MAX-epsilon) failed: %d\n",
789 ld
= nextafterl (ld
, 0.0);
790 v2
.d
= ld
= nextafterl (ld
, 1.0);
792 if (v1
.ieee
.mantissa0
!= v2
.ieee
.mantissa0
)
794 printf ("0.0625L down: mantissa0 differs: %8x vs %8x\n",
795 v1
.ieee
.mantissa0
, v2
.ieee
.mantissa0
);
798 if (v1
.ieee
.mantissa1
!= v2
.ieee
.mantissa1
)
800 printf ("0.0625L down: mantissa1 differs: %8x vs %8x\n",
801 v1
.ieee
.mantissa1
, v2
.ieee
.mantissa1
);
804 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
806 printf ("0.0625L down: exponent differs: %4x vs %4x\n",
807 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
810 if (v1
.ieee
.negative
!= v2
.ieee
.negative
)
812 printf ("0.0625L down: negative differs: %d vs %d\n",
813 v1
.ieee
.negative
, v2
.ieee
.negative
);
818 ld
= nextafterl (ld
, 1.0);
819 v2
.d
= ld
= nextafterl (ld
, 0.0);
821 if (v1
.ieee
.mantissa0
!= v2
.ieee
.mantissa0
)
823 printf ("0.0625L up: mantissa0 differs: %8x vs %8x\n",
824 v1
.ieee
.mantissa0
, v2
.ieee
.mantissa0
);
827 if (v1
.ieee
.mantissa1
!= v2
.ieee
.mantissa1
)
829 printf ("0.0625L up: mantissa1 differs: %8x vs %8x\n",
830 v1
.ieee
.mantissa1
, v2
.ieee
.mantissa1
);
833 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
835 printf ("0.0625L up: exponent differs: %4x vs %4x\n",
836 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
839 if (v1
.ieee
.negative
!= v2
.ieee
.negative
)
841 printf ("0.0625L up: negative differs: %d vs %d\n",
842 v1
.ieee
.negative
, v2
.ieee
.negative
);
847 ld
= nextafterl (ld
, 0.0);
848 v2
.d
= ld
= nextafterl (ld
, -1.0);
850 if (v1
.ieee
.mantissa0
!= v2
.ieee
.mantissa0
)
852 printf ("-0.0625L up: mantissa0 differs: %8x vs %8x\n",
853 v1
.ieee
.mantissa0
, v2
.ieee
.mantissa0
);
856 if (v1
.ieee
.mantissa1
!= v2
.ieee
.mantissa1
)
858 printf ("-0.0625L up: mantissa1 differs: %8x vs %8x\n",
859 v1
.ieee
.mantissa1
, v2
.ieee
.mantissa1
);
862 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
864 printf ("-0.0625L up: exponent differs: %4x vs %4x\n",
865 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
868 if (v1
.ieee
.negative
!= v2
.ieee
.negative
)
870 printf ("-0.0625L up: negative differs: %d vs %d\n",
871 v1
.ieee
.negative
, v2
.ieee
.negative
);
876 ld
= nextafterl (ld
, -1.0);
877 v2
.d
= ld
= nextafterl (ld
, 0.0);
879 if (v1
.ieee
.mantissa0
!= v2
.ieee
.mantissa0
)
881 printf ("-0.0625L down: mantissa0 differs: %8x vs %8x\n",
882 v1
.ieee
.mantissa0
, v2
.ieee
.mantissa0
);
885 if (v1
.ieee
.mantissa1
!= v2
.ieee
.mantissa1
)
887 printf ("-0.0625L down: mantissa1 differs: %8x vs %8x\n",
888 v1
.ieee
.mantissa1
, v2
.ieee
.mantissa1
);
891 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
893 printf ("-0.0625L down: exponent differs: %4x vs %4x\n",
894 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
897 if (v1
.ieee
.negative
!= v2
.ieee
.negative
)
899 printf ("-0.0625L down: negative differs: %d vs %d\n",
900 v1
.ieee
.negative
, v2
.ieee
.negative
);
905 ld
= nextafterl (ld
, 1.0);
906 v2
.d
= nextafterl (ld
, -1.0);
908 if (v1
.ieee
.mantissa0
!= v2
.ieee
.mantissa0
)
910 printf ("0.0L up: mantissa0 differs: %8x vs %8x\n",
911 v1
.ieee
.mantissa0
, v2
.ieee
.mantissa0
);
914 if (v1
.ieee
.mantissa1
!= v2
.ieee
.mantissa1
)
916 printf ("0.0L up: mantissa1 differs: %8x vs %8x\n",
917 v1
.ieee
.mantissa1
, v2
.ieee
.mantissa1
);
920 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
922 printf ("0.0L up: exponent differs: %4x vs %4x\n",
923 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
926 if (0 != v2
.ieee
.negative
)
928 printf ("0.0L up: negative differs: 0 vs %d\n",
934 ld
= nextafterl (ld
, -1.0);
935 v2
.d
= nextafterl (ld
, 1.0);
937 if (v1
.ieee
.mantissa0
!= v2
.ieee
.mantissa0
)
939 printf ("0.0L down: mantissa0 differs: %8x vs %8x\n",
940 v1
.ieee
.mantissa0
, v2
.ieee
.mantissa0
);
943 if (v1
.ieee
.mantissa1
!= v2
.ieee
.mantissa1
)
945 printf ("0.0L down: mantissa1 differs: %8x vs %8x\n",
946 v1
.ieee
.mantissa1
, v2
.ieee
.mantissa1
);
949 if (v1
.ieee
.exponent
!= v2
.ieee
.exponent
)
951 printf ("0.0L down: exponent differs: %4x vs %4x\n",
952 v1
.ieee
.exponent
, v2
.ieee
.exponent
);
955 if (1 != v2
.ieee
.negative
)
957 printf ("0.0L down: negative differs: 1 vs %d\n",
964 if (! isnormal (FLT_MIN
))
966 puts ("isnormal (FLT_MIN) failed");
969 if (! isnormal (DBL_MIN
))
971 puts ("isnormal (DBL_MIN) failed");
974 #ifndef NO_LONG_DOUBLE
975 if (! isnormal (LDBL_MIN
))
977 puts ("isnormal (LDBL_MIN) failed");
983 /* This is a test for the strange long doubles in x86 FPUs. */
990 { .b
= { 0, 0, 0, 0, 0, 0, 0, 0x80, 0, 0 } };
992 if (fpclassify (u
.d
) != FP_NORMAL
)
994 printf ("fpclassify (0x00008000000000000000) failed: %d (%Lg)\n",
995 fpclassify (u
.d
), u
.d
);
1000 /* Special NaNs in x86 long double. Test for scalbl. */
1007 { .b
= { 0, 1, 0, 0, 0, 0, 0, 0xc0, 0xff, 0x7f } };
1010 r
= scalbl (u
.d
, 0.0);
1013 puts ("scalbl(NaN, 0) does not return NaN");
1016 else if (memcmp (&r
, &u
.d
, sizeof (double)) != 0)
1018 puts ("scalbl(NaN, 0) does not return the same NaN");
1024 #ifndef NO_LONG_DOUBLE
1028 feclearexcept (FE_ALL_EXCEPT
);
1029 r
= scalbl (LDBL_MIN
, 2147483647);
1032 puts ("scalbl (LDBL_MIN, 2147483647) does not return Inf");
1035 else if (signbit (r
) != 0)
1037 puts ("scalbl (LDBL_MIN, 2147483647) returns -Inf");
1040 else if (fetestexcept (FE_UNDERFLOW
))
1042 puts ("scalbl(NaN, 0) raises underflow exception");
1046 feclearexcept (FE_ALL_EXCEPT
);
1047 r
= scalbl (LDBL_MAX
, -2147483647);
1050 puts ("scalbl (LDBL_MAX, -2147483647) does not return 0");
1053 else if (signbit (r
) != 0)
1055 puts ("scalbl (LDBL_MAX, -2147483647) returns -Inf");
1058 else if (fetestexcept (FE_OVERFLOW
))
1060 puts ("scalbl(NaN, 0) raises overflow exception");