diff options
author | David S. Miller <davem@davemloft.net> | 2012-11-16 09:31:38 -0800 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-11-16 09:31:38 -0800 |
commit | 447885ebf1c1fc8adf4084f5e2708ff84d0da43b (patch) | |
tree | 95a48aa60e330d4afc6de73d70879e9e52ca47ff | |
parent | bcbf9830b735acdd9b0d49fe96da73dfacfa17d0 (diff) | |
download | glibc-447885ebf1c1fc8adf4084f5e2708ff84d0da43b.zip glibc-447885ebf1c1fc8adf4084f5e2708ff84d0da43b.tar.gz glibc-447885ebf1c1fc8adf4084f5e2708ff84d0da43b.tar.bz2 |
Don't generate underflow for very small values in log1pl.
* sysdeps/ieee754/ldbl-128/s_log1pl.c (__log1pl): If xm1 is
smaller than LDBL_EPSILON/2.0L, just return xm1.
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-128/s_log1pl.c | 6 |
2 files changed, 11 insertions, 0 deletions
@@ -1,3 +1,8 @@ +2012-11-16 David S. Miller <davem@davemloft.net> + + * sysdeps/ieee754/ldbl-128/s_log1pl.c (__log1pl): If xm1 is + smaller than LDBL_EPSILON/2.0L, just return xm1. + 2012-11-16 H.J. Lu <hongjiu.lu@intel.com> * elf/tst-array1.c (init): Set constructor priority to 1000. diff --git a/sysdeps/ieee754/ldbl-128/s_log1pl.c b/sysdeps/ieee754/ldbl-128/s_log1pl.c index 4ecea0f..fad18e9 100644 --- a/sysdeps/ieee754/ldbl-128/s_log1pl.c +++ b/sysdeps/ieee754/ldbl-128/s_log1pl.c @@ -138,6 +138,12 @@ __log1pl (long double xm1) && (u.parts32.w1 | u.parts32.w2 | u.parts32.w3) == 0) return xm1; + if ((hx & 0x7fffffff) < 0x3f8e0000) + { + if ((int) xm1 == 0) + return xm1; + } + x = xm1 + 1.0L; /* log1p(-1) = -inf */ |