diff options
Diffstat (limited to 'newlib/libm/math/s_ldexp.c')
-rw-r--r-- | newlib/libm/math/s_ldexp.c | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/newlib/libm/math/s_ldexp.c b/newlib/libm/math/s_ldexp.c new file mode 100644 index 0000000..ccf7171 --- /dev/null +++ b/newlib/libm/math/s_ldexp.c @@ -0,0 +1,81 @@ + +/* @(#)s_ldexp.c 5.1 93/09/24 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* +FUNCTION + <<ldexp>>, <<ldexpf>>---load exponent + +INDEX + ldexp +INDEX + ldexpf + +ANSI_SYNOPSIS + #include <math.h> + double ldexp(double <[val]>, int <[exp]>); + float ldexpf(float <[val]>, int <[exp]>); + +TRAD_SYNOPSIS + #include <math.h> + + double ldexp(<[val]>, <[exp]>) + double <[val]>; + int <[exp]>; + + float ldexpf(<[val]>, <[exp]>) + float <[val]>; + int <[exp]>; + + +DESCRIPTION +<<ldexp>> calculates the value +@ifinfo +<[val]> times 2 to the power <[exp]>. +@end ifinfo +@tex +$val\times 2^{exp}$. +@end tex +<<ldexpf>> is identical, save that it takes and returns <<float>> +rather than <<double>> values. + +RETURNS +<<ldexp>> returns the calculated value. + +Underflow and overflow both set <<errno>> to <<ERANGE>>. +On underflow, <<ldexp>> and <<ldexpf>> return 0.0. +On overflow, <<ldexp>> returns plus or minus <<HUGE_VAL>>. + +PORTABILITY +<<ldexp>> is ANSI, <<ldexpf>> is an extension. + +*/ + +#include "fdlibm.h" +#include <errno.h> + +#ifndef _DOUBLE_IS_32BITS + +#ifdef __STDC__ + double ldexp(double value, int exp) +#else + double ldexp(value, exp) + double value; int exp; +#endif +{ + if(!finite(value)||value==0.0) return value; + value = scalbn(value,exp); + if(!finite(value)||value==0.0) errno = ERANGE; + return value; +} + +#endif /* _DOUBLE_IS_32BITS */ |