From eb51bac1b3f43c4fcccdf8206afb8a070fecaa07 Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Sat, 3 Jan 2009 14:42:54 +0000 Subject: libm/e_scalb.c: remove unused #ifdef _SCALB_INT branches libm/s_ldexp.c: add TODO --- libm/s_ldexp.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) (limited to 'libm/s_ldexp.c') diff --git a/libm/s_ldexp.c b/libm/s_ldexp.c index 1b681cb81..b2809afc8 100644 --- a/libm/s_ldexp.c +++ b/libm/s_ldexp.c @@ -13,11 +13,27 @@ #include "math_private.h" #include +/* TODO: POSIX says: + * + * "If the integer expression (math_errhandling & MATH_ERRNO) is non-zero, + * then errno shall be set to [ERANGE]. If the integer expression + * (math_errhandling & MATH_ERREXCEPT) is non-zero, then the underflow + * floating-point exception shall be raised." + * + * *And it says the same about scalbn*! Thus these two functions + * are the same and can be just aliased. + * + * Currently, ldexp tries to be vaguely POSIX compliant while scalbn + * does not (it does not set ERRNO). + */ + double ldexp(double value, int exp) { - if(!isfinite(value)||value==0.0) return value; - value = scalbn(value,exp); - if(!isfinite(value)||value==0.0) errno = ERANGE; + if (!isfinite(value) || value == 0.0) + return value; + value = scalbn(value, exp); + if (!isfinite(value) || value == 0.0) + errno = ERANGE; return value; } libm_hidden_def(ldexp) -- cgit v1.2.3