X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=src%2Fmath%2Fef_sqrt.c;fp=src%2Fmath%2Fef_sqrt.c;h=0000000000000000000000000000000000000000;hp=80e7f360e85147e6786ea24f0e63db498ae46945;hb=0686a7b8aec524d81bda4c572549a3a068ce0eed;hpb=6aa451ce81bfdfe679e3f9902043a5f0d235c745 diff --git a/src/math/ef_sqrt.c b/src/math/ef_sqrt.c deleted file mode 100644 index 80e7f360..00000000 --- a/src/math/ef_sqrt.c +++ /dev/null @@ -1,89 +0,0 @@ -/* ef_sqrtf.c -- float version of e_sqrt.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * 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. - * ==================================================== - */ - -#include "fdlibm.h" - -#ifdef __STDC__ -static const float one = 1.0, tiny=1.0e-30; -#else -static float one = 1.0, tiny=1.0e-30; -#endif - -#ifdef __STDC__ - float __ieee754_sqrtf(float x) -#else - float __ieee754_sqrtf(x) - float x; -#endif -{ - float z; - __uint32_t r,hx; - __int32_t ix,s,q,m,t,i; - - GET_FLOAT_WORD(ix,x); - hx = ix&0x7fffffff; - - /* take care of Inf and NaN */ - if(!FLT_UWORD_IS_FINITE(hx)) - return x*x+x; /* sqrt(NaN)=NaN, sqrt(+inf)=+inf - sqrt(-inf)=sNaN */ - /* take care of zero and -ves */ - if(FLT_UWORD_IS_ZERO(hx)) return x;/* sqrt(+-0) = +-0 */ - if(ix<0) return (x-x)/(x-x); /* sqrt(-ve) = sNaN */ - - /* normalize x */ - m = (ix>>23); - if(FLT_UWORD_IS_SUBNORMAL(hx)) { /* subnormal x */ - for(i=0;(ix&0x00800000L)==0;i++) ix<<=1; - m -= i-1; - } - m -= 127; /* unbias exponent */ - ix = (ix&0x007fffffL)|0x00800000L; - if(m&1) /* odd m, double x to make it even */ - ix += ix; - m >>= 1; /* m = [m/2] */ - - /* generate sqrt(x) bit by bit */ - ix += ix; - q = s = 0; /* q = sqrt(x) */ - r = 0x01000000L; /* r = moving bit from right to left */ - - while(r!=0) { - t = s+r; - if(t<=ix) { - s = t+r; - ix -= t; - q += r; - } - ix += ix; - r>>=1; - } - - /* use floating add to find out rounding direction */ - if(ix!=0) { - z = one-tiny; /* trigger inexact flag */ - if (z>=one) { - z = one+tiny; - if (z>one) - q += 2; - else - q += (q&1); - } - } - ix = (q>>1)+0x3f000000L; - ix += (m <<23); - SET_FLOAT_WORD(z,ix); - return z; -}