summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormartynas <martynas@openbsd.org>2011-05-28 22:46:39 +0000
committermartynas <martynas@openbsd.org>2011-05-28 22:46:39 +0000
commit2b167cc026fcf259b20e3734c5a35cef5e9117cf (patch)
treee4801fc11216db4f939aded78dcda4235a3a4d8a
parentAdd some simple test cases for lgamma, and lgammaf. (diff)
downloadwireguard-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.c6
-rw-r--r--lib/libm/src/e_lgammaf_r.c6
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;