diff options
Diffstat (limited to 'math')
-rw-r--r-- | math/Makefile | 4 | ||||
-rw-r--r-- | math/libm-test.inc | 10 | ||||
-rw-r--r-- | math/math_private.h | 3 | ||||
-rw-r--r-- | math/test-misc.c | 22 |
4 files changed, 37 insertions, 2 deletions
diff --git a/math/Makefile b/math/Makefile index cbc2f4c42d..2c175298f9 100644 --- a/math/Makefile +++ b/math/Makefile @@ -53,11 +53,11 @@ libm-calls = e_acos e_acosh e_asin e_atan2 e_atanh e_cosh e_exp e_fmod \ w_tgamma w_hypot w_j0 w_j1 w_jn w_lgamma w_lgamma_r \ w_log w_log10 w_pow w_remainder w_scalb w_sinh w_sqrt \ s_signbit s_fpclassify s_fmax s_fmin s_fdim s_nan s_trunc \ - s_remquo s_log2 e_exp2 s_round s_nearbyint s_sincos \ + s_remquo e_log2 e_exp2 s_round s_nearbyint s_sincos \ conj cimag creal cabs carg s_cexp s_csinh s_ccosh s_clog \ s_catan s_casin s_ccos s_csin s_ctan s_ctanh s_cacos \ s_casinh s_cacosh s_catanh s_csqrt s_cpow s_cproj s_clog10 \ - s_fma s_lrint s_llrint s_lround s_llround e_exp10 + s_fma s_lrint s_llrint s_lround s_llround e_exp10 w_log2 dbl-only-routines := branred doasin dosincos halfulp mpa mpatan2 \ mpatan mpexp mplog mpsqrt mptan sincos32 slowexp \ slowpow diff --git a/math/libm-test.inc b/math/libm-test.inc index c9ba1f9407..481c395643 100644 --- a/math/libm-test.inc +++ b/math/libm-test.inc @@ -120,6 +120,7 @@ #include <math.h> #include <float.h> #include <fenv.h> +#include <limits.h> #include <errno.h> #include <stdlib.h> @@ -2800,6 +2801,8 @@ ilogb_test (void) TEST_f_i (ilogb, 0.0, FP_ILOGB0, EXCEPTIONS_OK); TEST_f_i (ilogb, nan_value, FP_ILOGBNAN, EXCEPTIONS_OK); + TEST_f_i (ilogb, plus_infty, INT_MAX, EXCEPTIONS_OK); + TEST_f_i (ilogb, minus_infty, INT_MAX, EXCEPTIONS_OK); END (ilogb); } @@ -3302,6 +3305,13 @@ llround_test (void) /* 0x100000000000000 */ TEST_f_L (llround, 72057594037927936.0, 72057594037927936LL); +#ifndef TEST_FLOAT + /* 0x100000000 */ + TEST_f_L (llround, 4294967295.5, 4294967296LL); + /* 0x200000000 */ + TEST_f_L (llround, 8589934591.5, 8589934592LL); +#endif + END (llround); } diff --git a/math/math_private.h b/math/math_private.h index 19404d0a5d..593cb7a068 100644 --- a/math/math_private.h +++ b/math/math_private.h @@ -169,6 +169,7 @@ extern double __ieee754_gamma_r (double,int *); extern double __ieee754_lgamma (double); extern double __ieee754_gamma (double); extern double __ieee754_log10 (double); +extern double __ieee754_log2 (double); extern double __ieee754_sinh (double); extern double __ieee754_hypot (double,double); extern double __ieee754_j0 (double); @@ -211,6 +212,7 @@ extern float __ieee754_gammaf_r (float,int *); extern float __ieee754_lgammaf (float); extern float __ieee754_gammaf (float); extern float __ieee754_log10f (float); +extern float __ieee754_log2f (float); extern float __ieee754_sinhf (float); extern float __ieee754_hypotf (float,float); extern float __ieee754_j0f (float); @@ -250,6 +252,7 @@ extern long double __ieee754_gammal_r (long double,int *); extern long double __ieee754_lgammal (long double); extern long double __ieee754_gammal (long double); extern long double __ieee754_log10l (long double); +extern long double __ieee754_log2l (long double); extern long double __ieee754_sinhl (long double); extern long double __ieee754_hypotl (long double,long double); extern long double __ieee754_j0l (long double); diff --git a/math/test-misc.c b/math/test-misc.c index ba34f92e9e..5a785745cd 100644 --- a/math/test-misc.c +++ b/math/test-misc.c @@ -79,6 +79,28 @@ main (void) } puts ("ok"); } + + for (i = LDBL_MIN_EXP, x = LDBL_MIN; i >= LDBL_MIN_EXP - LDBL_MANT_DIG + 1; + --i, x /= 2.0L) + { + printf ("2^%d: ", i); + + r = frexpl (x, &e); + if (r != 0.5L) + { + printf ("mantissa incorrect: %.20La\n", r); + result = 1; + continue; + } + if (e != i) + { + printf ("exponent wrong %d (%.20Lg)\n", e, x); + result = 1; + continue; + } + puts ("ok"); + } + } # endif |