diff options
author | 2011-05-28 22:46:39 +0000 | |
---|---|---|
committer | 2011-05-28 22:46:39 +0000 | |
commit | 2b167cc026fcf259b20e3734c5a35cef5e9117cf (patch) | |
tree | e4801fc11216db4f939aded78dcda4235a3a4d8a | |
parent | Add some simple test cases for lgamma, and lgammaf. (diff) | |
download | wireguard-openbsd-2b167cc026fcf259b20e3734c5a35cef5e9117cf.tar.xz wireguard-openbsd-2b167cc026fcf259b20e3734c5a35cef5e9117cf.zip |
Store -1 into signgam in case of a special value of -0.
-rw-r--r-- | lib/libm/src/e_lgamma_r.c | 6 | ||||
-rw-r--r-- | lib/libm/src/e_lgammaf_r.c | 6 |
2 files changed, 10 insertions, 2 deletions
diff --git a/lib/libm/src/e_lgamma_r.c b/lib/libm/src/e_lgamma_r.c index 28c07e29b88..fb22a4dde39 100644 --- a/lib/libm/src/e_lgamma_r.c +++ b/lib/libm/src/e_lgamma_r.c @@ -208,7 +208,11 @@ lgamma_r(double x, int *signgamp) *signgamp = 1; ix = hx&0x7fffffff; if(ix>=0x7ff00000) return x*x; - if((ix|lx)==0) return one/zero; + if((ix|lx)==0) { + if(hx<0) + *signgamp = -1; + return one/zero; + } if(ix<0x3b900000) { /* |x|<2**-70, return -log(|x|) */ if(hx<0) { *signgamp = -1; diff --git a/lib/libm/src/e_lgammaf_r.c b/lib/libm/src/e_lgammaf_r.c index 2e9bd198c87..2e5b413cfb1 100644 --- a/lib/libm/src/e_lgammaf_r.c +++ b/lib/libm/src/e_lgammaf_r.c @@ -144,7 +144,11 @@ lgammaf_r(float x, int *signgamp) *signgamp = 1; ix = hx&0x7fffffff; if(ix>=0x7f800000) return x*x; - if(ix==0) return one/zero; + if(ix==0) { + if(hx<0) + *signgamp = -1; + return one/zero; + } if(ix<0x1c800000) { /* |x|<2**-70, return -log(|x|) */ if(hx<0) { *signgamp = -1; |