diff options
Diffstat (limited to 'sysdeps/ieee754/flt-32')
-rw-r--r-- | sysdeps/ieee754/flt-32/Dist | 1 | ||||
-rw-r--r-- | sysdeps/ieee754/flt-32/e_atan2f.c | 2 | ||||
-rw-r--r-- | sysdeps/ieee754/flt-32/e_exp2f.c | 2 | ||||
-rw-r--r-- | sysdeps/ieee754/flt-32/e_expf.c | 2 | ||||
-rw-r--r-- | sysdeps/ieee754/flt-32/e_hypotf.c | 10 | ||||
-rw-r--r-- | sysdeps/ieee754/flt-32/s_expm1f.c | 11 | ||||
-rw-r--r-- | sysdeps/ieee754/flt-32/s_llrintf.c | 10 | ||||
-rw-r--r-- | sysdeps/ieee754/flt-32/s_lrintf.c | 10 | ||||
-rw-r--r-- | sysdeps/ieee754/flt-32/s_nextafterf.c | 20 |
9 files changed, 36 insertions, 32 deletions
diff --git a/sysdeps/ieee754/flt-32/Dist b/sysdeps/ieee754/flt-32/Dist new file mode 100644 index 0000000000..045ac801f6 --- /dev/null +++ b/sysdeps/ieee754/flt-32/Dist @@ -0,0 +1 @@ +t_exp2f.h diff --git a/sysdeps/ieee754/flt-32/e_atan2f.c b/sysdeps/ieee754/flt-32/e_atan2f.c index c0cafb16b8..8b3398c0a3 100644 --- a/sysdeps/ieee754/flt-32/e_atan2f.c +++ b/sysdeps/ieee754/flt-32/e_atan2f.c @@ -30,7 +30,7 @@ zero = 0.0, pi_o_4 = 7.8539818525e-01, /* 0x3f490fdb */ pi_o_2 = 1.5707963705e+00, /* 0x3fc90fdb */ pi = 3.1415927410e+00, /* 0x40490fdb */ -pi_lo = -8.7422776573e-08; /* 0xb3bbbd2e */ +pi_lo = -8.7422776573e-07; /* 0xb3bbbd2e */ #ifdef __STDC__ float __ieee754_atan2f(float y, float x) diff --git a/sysdeps/ieee754/flt-32/e_exp2f.c b/sysdeps/ieee754/flt-32/e_exp2f.c index 194222a0cd..752272db46 100644 --- a/sysdeps/ieee754/flt-32/e_exp2f.c +++ b/sysdeps/ieee754/flt-32/e_exp2f.c @@ -1,5 +1,5 @@ /* Single-precision floating point 2^x. - Copyright (C) 1997,1998,2000,2001,2005,2006 Free Software Foundation, Inc. + Copyright (C) 1997, 1998, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Geoffrey Keating <geoffk@ozemail.com.au> diff --git a/sysdeps/ieee754/flt-32/e_expf.c b/sysdeps/ieee754/flt-32/e_expf.c index b9cd53c033..62448a9554 100644 --- a/sysdeps/ieee754/flt-32/e_expf.c +++ b/sysdeps/ieee754/flt-32/e_expf.c @@ -1,5 +1,5 @@ /* Single-precision floating point e^x. - Copyright (C) 1997, 1998, 2005, 2006 Free Software Foundation, Inc. + Copyright (C) 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Geoffrey Keating <geoffk@ozemail.com.au> diff --git a/sysdeps/ieee754/flt-32/e_hypotf.c b/sysdeps/ieee754/flt-32/e_hypotf.c index a8e1a52d2b..d6b1520cb8 100644 --- a/sysdeps/ieee754/flt-32/e_hypotf.c +++ b/sysdeps/ieee754/flt-32/e_hypotf.c @@ -23,7 +23,7 @@ static char rcsid[] = "$NetBSD: e_hypotf.c,v 1.5 1995/05/12 04:57:30 jtc Exp $"; #ifdef __STDC__ float __ieee754_hypotf(float x, float y) #else - float __ieee754_hypotf(x,y) + float __ieee754_hypot(x,y) float x, y; #endif { @@ -47,20 +47,20 @@ static char rcsid[] = "$NetBSD: e_hypotf.c,v 1.5 1995/05/12 04:57:30 jtc Exp $"; return w; } /* scale a and b by 2**-60 */ - ha -= 0x1e000000; hb -= 0x1e000000; k += 60; + ha -= 0x5d800000; hb -= 0x5d800000; k += 60; SET_FLOAT_WORD(a,ha); SET_FLOAT_WORD(b,hb); } if(hb < 0x26800000) { /* b < 2**-50 */ if(hb <= 0x007fffff) { /* subnormal b or 0 */ if(hb==0) return a; - SET_FLOAT_WORD(t1,0x7e800000); /* t1=2^126 */ + SET_FLOAT_WORD(t1,0x3f000000); /* t1=2^126 */ b *= t1; a *= t1; k -= 126; } else { /* scale a and b by 2^60 */ - ha += 0x1e000000; /* a *= 2^60 */ - hb += 0x1e000000; /* b *= 2^60 */ + ha += 0x5d800000; /* a *= 2^60 */ + hb += 0x5d800000; /* b *= 2^60 */ k -= 60; SET_FLOAT_WORD(a,ha); SET_FLOAT_WORD(b,hb); diff --git a/sysdeps/ieee754/flt-32/s_expm1f.c b/sysdeps/ieee754/flt-32/s_expm1f.c index 1f032be25f..375e334c38 100644 --- a/sysdeps/ieee754/flt-32/s_expm1f.c +++ b/sysdeps/ieee754/flt-32/s_expm1f.c @@ -8,7 +8,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -20,8 +20,7 @@ static char rcsid[] = "$NetBSD: s_expm1f.c,v 1.5 1995/05/10 20:47:11 jtc Exp $"; #include "math.h" #include "math_private.h" -static const volatile float huge = 1.0e+30; -static const volatile float tiny = 1.0e-30; +static const volatile float huge = 1.0e+30, tiny = 1.0e-30; #ifdef __STDC__ static const float @@ -72,7 +71,7 @@ Q5 = -2.0109921195e-07; /* 0xb457edbb */ } /* argument reduction */ - if(hx > 0x3eb17218) { /* if |x| > 0.5 ln2 */ + if(hx > 0x3eb17218) { /* if |x| > 0.5 ln2 */ if(hx < 0x3F851592) { /* and |x| < 1.5 ln2 */ if(xsb==0) {hi = x - ln2_hi; lo = ln2_lo; k = 1;} @@ -86,10 +85,10 @@ Q5 = -2.0109921195e-07; /* 0xb457edbb */ } x = hi - lo; c = (hi-x)-lo; - } + } else if(hx < 0x33000000) { /* when |x|<2**-25, return x */ t = huge+x; /* return x with inexact flags when x!=0 */ - return x - (t-(huge+x)); + return x - (t-(huge+x)); } else k = 0; diff --git a/sysdeps/ieee754/flt-32/s_llrintf.c b/sysdeps/ieee754/flt-32/s_llrintf.c index 7c6e4bcda4..3b9a484a8d 100644 --- a/sysdeps/ieee754/flt-32/s_llrintf.c +++ b/sysdeps/ieee754/flt-32/s_llrintf.c @@ -1,6 +1,6 @@ /* Round argument to nearest integral value according to current rounding direction. - Copyright (C) 1997, 2006 Free Software Foundation, Inc. + Copyright (C) 1997 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -23,7 +23,7 @@ #include "math_private.h" -static const float two23[2] = +static const double two23[2] = { 8.3886080000e+06, /* 0x4B000000 */ -8.3886080000e+06, /* 0xCB000000 */ @@ -49,7 +49,9 @@ __llrintf (float x) if (j0 < (int32_t) (sizeof (long long int) * 8) - 1) { - if (j0 >= 23) + if (j0 < -1) + return 0; + else if (j0 >= 23) result = (long long int) i0 << (j0 - 23); else { @@ -60,7 +62,7 @@ __llrintf (float x) i0 &= 0x7fffff; i0 |= 0x800000; - result = (j0 < 0 ? 0 : i0 >> (23 - j0)); + result = i0 >> (23 - j0); } } else diff --git a/sysdeps/ieee754/flt-32/s_lrintf.c b/sysdeps/ieee754/flt-32/s_lrintf.c index 64486a4c3e..2a156f7ce2 100644 --- a/sysdeps/ieee754/flt-32/s_lrintf.c +++ b/sysdeps/ieee754/flt-32/s_lrintf.c @@ -1,6 +1,6 @@ /* Round argument to nearest integral value according to current rounding direction. - Copyright (C) 1997, 2006 Free Software Foundation, Inc. + Copyright (C) 1997 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -23,7 +23,7 @@ #include "math_private.h" -static const float two23[2] = +static const double two23[2] = { 8.3886080000e+06, /* 0x4B000000 */ -8.3886080000e+06, /* 0xCB000000 */ @@ -49,7 +49,9 @@ __lrintf (float x) if (j0 < (int32_t) (sizeof (long int) * 8) - 1) { - if (j0 >= 23) + if (j0 < -1) + return 0; + else if (j0 >= 23) result = (long int) i0 << (j0 - 23); else { @@ -60,7 +62,7 @@ __lrintf (float x) i0 &= 0x7fffff; i0 |= 0x800000; - result = (j0 < 0 ? 0 : i0 >> (23 - j0)); + result = i0 >> (23 - j0); } } else diff --git a/sysdeps/ieee754/flt-32/s_nextafterf.c b/sysdeps/ieee754/flt-32/s_nextafterf.c index 600c14621f..e1568e24c9 100644 --- a/sysdeps/ieee754/flt-32/s_nextafterf.c +++ b/sysdeps/ieee754/flt-32/s_nextafterf.c @@ -18,7 +18,7 @@ static char rcsid[] = "$NetBSD: s_nextafterf.c,v 1.4 1995/05/10 20:48:01 jtc Exp #endif #include "math.h" -#include <math_private.h> +#include "math_private.h" #include <float.h> #ifdef __STDC__ @@ -40,12 +40,9 @@ static char rcsid[] = "$NetBSD: s_nextafterf.c,v 1.4 1995/05/10 20:48:01 jtc Exp return x+y; if(x==y) return y; /* x=y, return y */ if(ix==0) { /* x == 0 */ - float u; SET_FLOAT_WORD(x,(hy&0x80000000)|1);/* return +-minsubnormal */ - u = math_opt_barrier (x); - u = u*u; - math_force_eval (u); /* raise underflow flag */ - return x; + y = x*x; + if(y==x) return y; else return x; /* raise underflow flag */ } if(hx>=0) { /* x > 0 */ if(hx>hy) { /* x > y, x -= ulp */ @@ -64,12 +61,15 @@ static char rcsid[] = "$NetBSD: s_nextafterf.c,v 1.4 1995/05/10 20:48:01 jtc Exp if(hy>=0x7f800000) { x = x+x; /* overflow */ if (FLT_EVAL_METHOD != 0) - asm ("" : "+m"(x)); + asm ("" : "=m"(x) : "m"(x)); return x; /* overflow */ } - if(hy<0x00800000) { - float u = x*x; /* underflow */ - math_force_eval (u); /* raise underflow flag */ + if(hy<0x00800000) { /* underflow */ + y = x*x; + if(y!=x) { /* raise underflow flag */ + SET_FLOAT_WORD(y,hx); + return y; + } } SET_FLOAT_WORD(x,hx); return x; |