diff options
-rw-r--r-- | libm/Makefile | 2 | ||||
-rw-r--r-- | libm/w_sqrtf.c | 46 |
2 files changed, 47 insertions, 1 deletions
diff --git a/libm/Makefile b/libm/Makefile index a6e8e26a9..433d32470 100644 --- a/libm/Makefile +++ b/libm/Makefile @@ -62,7 +62,7 @@ CSRC = e_acos.c e_acosh.c e_asin.c e_atan2.c e_atanh.c e_cosh.c\ w_cosh.c w_drem.c w_exp.c w_fmod.c w_gamma.c w_gamma_r.c\ w_hypot.c w_j0.c w_j1.c w_jn.c w_lgamma.c w_lgamma_r.c\ w_log.c w_log10.c w_pow.c w_remainder.c w_scalb.c w_sinh.c\ - w_sqrt.c fpmacros.c + w_sqrt.c w_sqrtf.c fpmacros.c else # This list of math functions was taken from POSIX/IEEE 1003.1b-1993 CSRC = w_acos.c w_asin.c s_atan.c w_atan2.c s_ceil.c s_cos.c \ diff --git a/libm/w_sqrtf.c b/libm/w_sqrtf.c new file mode 100644 index 000000000..771d5b198 --- /dev/null +++ b/libm/w_sqrtf.c @@ -0,0 +1,46 @@ +/* vi: set sw=4 ts=4: */ +/* sqrtf for uClibc + * + * Copyright (C) 2002 by Erik Andersen <andersen@uclibc.org> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Library General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + * for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* + * wrapper for sqrt(x) + */ + +#include "math.h" +#include "math_private.h" + +#ifdef __STDC__ + float sqrtf(float x) /* wrapper sqrt */ +#else + float sqrtf(x) /* wrapper sqrt */ + float x; +#endif +{ +#ifdef _IEEE_LIBM + return __ieee754_sqrt(x); +#else + float z; + z = __ieee754_sqrt(x); + if(_LIB_VERSION == _IEEE_ || isnan(x)) return z; + if(x<0.0) { + return __kernel_standard(x,x,26); /* sqrt(negative) */ + } else + return z; +#endif +} |