From 4a7ceb5a83feade78f5a35b2f82ff1c6c8ea7fcb Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Wed, 11 Feb 1998 13:11:40 +0000 Subject: [PATCH] Update. 1998-02-11 08:30 H.J. Lu * sysdeps/libm-ieee754/w_powl.c (__powl): Use __finitel instead of __finite. --- ChangeLog | 5 +++++ stdlib/strtod.c | 15 ++++++++++----- sysdeps/libm-ieee754/w_powl.c | 2 +- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0d10e5cba3..34100b506f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +1998-02-11 08:30 H.J. Lu + + * sysdeps/libm-ieee754/w_powl.c (__powl): Use __finitel instead + of __finite. + 1998-02-11 19:16 Richard Henderson * stdlib/strtod.c (STRTOF): Don't call lshift with zero count. diff --git a/stdlib/strtod.c b/stdlib/strtod.c index e93ec9add2..061cedc98a 100644 --- a/stdlib/strtod.c +++ b/stdlib/strtod.c @@ -1,6 +1,6 @@ /* Read decimal floating point numbers. This file is part of the GNU C Library. - Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. + Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. Contributed by Ulrich Drepper , 1995. The GNU C Library is free software; you can redistribute it and/or @@ -1091,10 +1091,15 @@ INTERNAL (STRTOF) (nptr, endptr, group LOCALE_PARAM) count_leading_zeros (cnt, den[densize - 1]); - (void) __mpn_lshift (den, den, densize, cnt); - cy = __mpn_lshift (num, num, numsize, cnt); - if (cy != 0) - num[numsize++] = cy; + if (cnt > 0) + { + /* Don't call `mpn_shift' with a count of zero since the specification + does not allow this. */ + (void) __mpn_lshift (den, den, densize, cnt); + cy = __mpn_lshift (num, num, numsize, cnt); + if (cy != 0) + num[numsize++] = cy; + } /* Now we are ready for the division. But it is not necessary to do a full multi-precision division because we only need a small diff --git a/sysdeps/libm-ieee754/w_powl.c b/sysdeps/libm-ieee754/w_powl.c index aea572d905..3529b5024c 100644 --- a/sysdeps/libm-ieee754/w_powl.c +++ b/sysdeps/libm-ieee754/w_powl.c @@ -44,7 +44,7 @@ if(x==0.0){ if(y==0.0) return __kernel_standard(x,y,220); /* pow(0.0,0.0) */ - if(__finite(y)&&y<0.0) + if(__finitel(y)&&y<0.0) if (signbit (x) && signbit (z)) return __kernel_standard(x,y,223); /* pow(-0.0,negative) */ else