diff options
Diffstat (limited to 'math/test-misc.c')
-rw-r--r-- | math/test-misc.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/math/test-misc.c b/math/test-misc.c index 515277f5ad..c0b8d0ff77 100644 --- a/math/test-misc.c +++ b/math/test-misc.c @@ -39,6 +39,43 @@ main (void) result = 1; } } + +# if __GNUC__ >= 3 || __GNUC_MINOR__ >= 96 + { + long double x = LDBL_MAX / ldexpl (1.0L, LDBL_MANT_DIG + 1); + long double m; + int i; + +# if LDBL_MANT_DIG == 64 + m = 0xf.fffffffffffffffp-4L; +# else +# error "Please adjust" +# endif + + for (i = 0; i < LDBL_MANT_DIG + 1; ++i, x *= 2.0L) + { + long double r; + int e; + + printf ("2^%d: ", LDBL_MAX_EXP - (LDBL_MANT_DIG + 1) + i); + + r = frexpl (x, &e); + if (r != m) + { + printf ("mantissa incorrect: %.20La\n", r); + result = 1; + continue; + } + if (e != LDBL_MAX_EXP - (LDBL_MANT_DIG + 1) + i) + { + printf ("exponent wrong %d (%.20Lg)\n", e, x); + result = 1; + continue; + } + puts ("ok"); + } + } +# endif #endif { |