diff options
Diffstat (limited to 'lib/msun/src')
-rw-r--r-- | lib/msun/src/e_rem_pio2.c | 9 | ||||
-rw-r--r-- | lib/msun/src/e_rem_pio2f.c | 10 |
2 files changed, 8 insertions, 11 deletions
diff --git a/lib/msun/src/e_rem_pio2.c b/lib/msun/src/e_rem_pio2.c index fc95125..96fc5c4 100644 --- a/lib/msun/src/e_rem_pio2.c +++ b/lib/msun/src/e_rem_pio2.c @@ -10,6 +10,7 @@ * is preserved. * ==================================================== * + * Optimized by Bruce D. Evans. */ #include <sys/cdefs.h> @@ -127,16 +128,15 @@ __ieee754_rem_pio2(double x, double *y) } if(ix<=0x413921fb) { /* |x| ~<= 2^19*(pi/2), medium size */ medium: - t = fabs(x); /* Use a specialized rint() to get fn. Assume round-to-nearest. */ - STRICT_ASSIGN(double,fn,t*invpio2+0x1.8p52); + STRICT_ASSIGN(double,fn,x*invpio2+0x1.8p52); fn = fn-0x1.8p52; #ifdef HAVE_EFFICIENT_IRINT n = irint(fn); #else n = (int32_t)fn; #endif - r = t-fn*pio2_1; + r = x-fn*pio2_1; w = fn*pio2_1t; /* 1st round good to 85 bit */ { u_int32_t high; @@ -162,8 +162,7 @@ medium: } } y[1] = (r-y[0])-w; - if(hx<0) {y[0] = -y[0]; y[1] = -y[1]; return -n;} - else return n; + return n; } /* * all other (large) arguments diff --git a/lib/msun/src/e_rem_pio2f.c b/lib/msun/src/e_rem_pio2f.c index 2ed10db..60f8256 100644 --- a/lib/msun/src/e_rem_pio2f.c +++ b/lib/msun/src/e_rem_pio2f.c @@ -44,7 +44,7 @@ pio2_1t = 6.07710050650619224932e-11; /* 0x3DD0B461, 0x1A626331 */ int __ieee754_rem_pio2f(float x, float *y) { - double w,t,r,fn; + double w,r,fn; double tx[1],ty[2]; float z; int32_t e0,n,ix,hx; @@ -53,21 +53,19 @@ __ieee754_rem_pio2f(float x, float *y) ix = hx&0x7fffffff; /* 33+53 bit pi is good enough for medium size */ if(ix<=0x49490f80) { /* |x| ~<= 2^19*(pi/2), medium size */ - t = fabsf(x); /* Use a specialized rint() to get fn. Assume round-to-nearest. */ - STRICT_ASSIGN(double,fn,t*invpio2+0x1.8p52); + STRICT_ASSIGN(double,fn,x*invpio2+0x1.8p52); fn = fn-0x1.8p52; #ifdef HAVE_EFFICIENT_IRINT n = irint(fn); #else n = (int32_t)fn; #endif - r = t-fn*pio2_1; + r = x-fn*pio2_1; w = fn*pio2_1t; y[0] = r-w; y[1] = (r-y[0])-w; - if(hx<0) {y[0] = -y[0]; y[1] = -y[1]; return -n;} - else return n; + return n; } /* * all other (large) arguments |