This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Hi! On Wed, 03 Apr 2013 21:52:21 +0200, I wrote: > * sysdeps/ieee754/dbl-64/e_pow.c (__ieee754_pow): Remove > unreachable code. On top of that, OK to commit? [BZ #15335] * sysdeps/ieee754/dbl-64/upow.h (NaNQ): Remove definitions. * sysdeps/ieee754/dbl-64/e_pow.c (__ieee754_pow): Instead, use input NaN values or generate a qNaN by arithmetic operation. diff --git NEWS NEWS index 3bb5cb3..1697d4e 100644 --- NEWS +++ NEWS @@ -12,7 +12,7 @@ Version 2.18 10357, 11120, 11561, 12723, 13550, 13889, 13951, 14142, 14176, 14200, 14317, 14327, 14496, 14812, 14920, 14964, 14981, 14982, 14985, 14994, 14996, 15003, 15006, 15020, 15023, 15036, 15054, 15055, 15062, 15078, - 15160, 15214, 15232, 15234, 15283, 15285, 15287, 15304, 15307. + 15160, 15214, 15232, 15234, 15283, 15285, 15287, 15304, 15307, 15335. * Add support for calling C++11 thread_local object destructors on thread and program exit. This needs compiler support for offloading C++11 diff --git sysdeps/ieee754/dbl-64/e_pow.c sysdeps/ieee754/dbl-64/e_pow.c index 44d6f62..9a766e7 100644 --- sysdeps/ieee754/dbl-64/e_pow.c +++ sysdeps/ieee754/dbl-64/e_pow.c @@ -71,8 +71,9 @@ __ieee754_pow(double x, double y) { u.x=x; if (v.i[LOW_HALF] == 0) { /* of y */ qx = u.i[HIGH_HALF]&0x7fffffff; - /* Checking if x is not too small to compute */ - if (((qx==0x7ff00000)&&(u.i[LOW_HALF]!=0))||(qx>0x7ff00000)) return NaNQ.x; + /* Is x a NaN? */ + if (((qx == 0x7ff00000) && (u.i[LOW_HALF] != 0)) || (qx > 0x7ff00000)) + return x; if (y == 1.0) return x; if (y == 2.0) return x*x; if (y == -1.0) return 1.0/x; @@ -111,7 +112,7 @@ __ieee754_pow(double x, double y) { if (x == 0) { if (((v.i[HIGH_HALF] & 0x7fffffff) == 0x7ff00000 && v.i[LOW_HALF] != 0) - || (v.i[HIGH_HALF] & 0x7fffffff) > 0x7ff00000) + || (v.i[HIGH_HALF] & 0x7fffffff) > 0x7ff00000) /* NaN */ return y; if (ABS(y) > 1.0e20) return (y>0)?0:1.0/0.0; k = checkint(y); @@ -124,9 +125,10 @@ __ieee754_pow(double x, double y) { qx = u.i[HIGH_HALF]&0x7fffffff; /* no sign */ qy = v.i[HIGH_HALF]&0x7fffffff; /* no sign */ - if (qx >= 0x7ff00000 && (qx > 0x7ff00000 || u.i[LOW_HALF] != 0)) return NaNQ.x; - if (qy >= 0x7ff00000 && (qy > 0x7ff00000 || v.i[LOW_HALF] != 0)) - return x == 1.0 ? 1.0 : NaNQ.x; + if (qx >= 0x7ff00000 && (qx > 0x7ff00000 || u.i[LOW_HALF] != 0)) /* NaN */ + return x; + if (qy >= 0x7ff00000 && (qy > 0x7ff00000 || v.i[LOW_HALF] != 0)) /* NaN */ + return x == 1.0 ? 1.0 : y; /* if x<0 */ if (u.i[HIGH_HALF] < 0) { @@ -139,7 +141,7 @@ __ieee754_pow(double x, double y) { } else if (qx == 0x7ff00000) return y < 0 ? 0.0 : INF.x; - return NaNQ.x; /* y not integer and x<0 */ + return (x - x) / (x - x); /* y not integer and x<0 */ } else if (qx == 0x7ff00000) { diff --git sysdeps/ieee754/dbl-64/upow.h sysdeps/ieee754/dbl-64/upow.h index 67bae1a..130fb32 100644 --- sysdeps/ieee754/dbl-64/upow.h +++ sysdeps/ieee754/dbl-64/upow.h @@ -34,7 +34,6 @@ /**/ nZERO = {{0x80000000, 0}}, /* -0.0 */ /**/ INF = {{0x7ff00000, 0x00000000}}, /* INF */ /**/ nINF = {{0xfff00000, 0x00000000}}, /* -INF */ -/**/ NaNQ = {{0x7ff80000, 0x00000000}}, /* NaNQ */ /**/ sqrt_2 = {{0x3ff6a09e, 0x667f3bcc}}, /* sqrt(2) */ /**/ ln2a = {{0x3fe62e42, 0xfefa3800}}, /* ln(2) 43 bits */ /**/ ln2b = {{0x3d2ef357, 0x93c76730}}, /* ln(2)-ln2a */ @@ -49,7 +48,6 @@ /**/ nZERO = {{0, 0x80000000}}, /* -0.0 */ /**/ INF = {{0x00000000, 0x7ff00000}}, /* INF */ /**/ nINF = {{0x00000000, 0xfff00000}}, /* -INF */ -/**/ NaNQ = {{0x00000000, 0x7ff80000}}, /* NaNQ */ /**/ sqrt_2 = {{0x667f3bcc, 0x3ff6a09e}}, /* sqrt(2) */ /**/ ln2a = {{0xfefa3800, 0x3fe62e42}}, /* ln(2) 43 bits */ /**/ ln2b = {{0x93c76730, 0x3d2ef357}}, /* ln(2)-ln2a */ GrÃÃe, Thomas
Attachment:
pgpdqc2xIsGY_.pgp
Description: PGP signature
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |