From f14bd805a73308dd187d9fc768358a07a8efc54a Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Mon, 19 Feb 2001 23:16:05 +0000 Subject: [PATCH] Update. * sysdeps/ieee754/flt-32/e_powf.c: Handle x == +-1 correctly. * sysdeps/ieee754/dbl-64/e_pow.c: Likewise. --- ChangeLog | 3 +++ sysdeps/ieee754/dbl-64/e_pow.c | 4 ++++ sysdeps/ieee754/flt-32/e_powf.c | 4 ++++ 3 files changed, 11 insertions(+) diff --git a/ChangeLog b/ChangeLog index 47e5e83954..c099012972 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2001-02-19 Ulrich Drepper + * sysdeps/ieee754/flt-32/e_powf.c: Handle x == +-1 correctly. + * sysdeps/ieee754/dbl-64/e_pow.c: Likewise. + * sysdeps/generic/e_scalb.c: Set invalid exception for invalid parameters. * sysdeps/generic/e_scalbf.c: New file. diff --git a/sysdeps/ieee754/dbl-64/e_pow.c b/sysdeps/ieee754/dbl-64/e_pow.c index 1e1496f00d..73e8f471f6 100644 --- a/sysdeps/ieee754/dbl-64/e_pow.c +++ b/sysdeps/ieee754/dbl-64/e_pow.c @@ -149,6 +149,10 @@ C[] = { /* y==zero: x**0 = 1 */ if((iy|ly)==0) return C[1]; + /* x==+-1 */ + if(x == 1.0) return C[1]; + if(x == -1.0 && isinf(y)) return C[1]; + /* +-NaN return x+y */ if(ix > 0x7ff00000 || ((ix==0x7ff00000)&&(lx!=0)) || iy > 0x7ff00000 || ((iy==0x7ff00000)&&(ly!=0))) diff --git a/sysdeps/ieee754/flt-32/e_powf.c b/sysdeps/ieee754/flt-32/e_powf.c index 4798340c84..9f520804a4 100644 --- a/sysdeps/ieee754/flt-32/e_powf.c +++ b/sysdeps/ieee754/flt-32/e_powf.c @@ -76,6 +76,10 @@ ivln2_l = 7.0526075433e-06; /* 0x36eca570 =1/ln2 tail*/ /* y==zero: x**0 = 1 */ if(iy==0) return one; + /* x==+-1 */ + if(x == 1.0) return one; + if(x == -1.0 && isinf(y)) return one; + /* +-NaN return x+y */ if(ix > 0x7f800000 || iy > 0x7f800000)