diff options
Diffstat (limited to 'libm/s_ldexp.c')
-rw-r--r-- | libm/s_ldexp.c | 22 |
1 files changed, 19 insertions, 3 deletions
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 <errno.h> +/* 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) |