diff options
author | Joseph Myers <joseph@codesourcery.com> | 2013-03-21 13:57:21 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2013-03-21 13:57:21 +0000 |
commit | 98c48fe5cc4317123a168490a8fb37540e23f104 (patch) | |
tree | bef07c691890f1a2f0a339df2722c64a1b7c08a1 /sysdeps/ieee754/ldbl-128/e_j1l.c | |
parent | 3775a8bc2d2e0c29c8a7e673f5f42537ced2b3c7 (diff) | |
download | glibc-98c48fe5cc4317123a168490a8fb37540e23f104.tar.gz glibc-98c48fe5cc4317123a168490a8fb37540e23f104.tar.xz glibc-98c48fe5cc4317123a168490a8fb37540e23f104.zip |
Fix Bessel function spurious overflows for ldbl-128 / ldbl-128ibm (bug 15285).
Diffstat (limited to 'sysdeps/ieee754/ldbl-128/e_j1l.c')
-rw-r--r-- | sysdeps/ieee754/ldbl-128/e_j1l.c | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/sysdeps/ieee754/ldbl-128/e_j1l.c b/sysdeps/ieee754/ldbl-128/e_j1l.c index 95e01a39cc..70a1c86fd2 100644 --- a/sysdeps/ieee754/ldbl-128/e_j1l.c +++ b/sysdeps/ieee754/ldbl-128/e_j1l.c @@ -97,6 +97,7 @@ #include <math.h> #include <math_private.h> +#include <float.h> /* 1 / sqrt(pi) */ static const long double ONEOSQPI = 5.6418958354775628694807945156077258584405E-1L; @@ -715,11 +716,14 @@ __ieee754_j1l (long double x) __sincosl (xx, &s, &c); ss = -s - c; cc = s - c; - z = __cosl (xx + xx); - if ((s * c) > 0) - cc = z / ss; - else - ss = z / cc; + if (xx <= LDBL_MAX / 2.0L) + { + z = __cosl (xx + xx); + if ((s * c) > 0) + cc = z / ss; + else + ss = z / cc; + } if (xx > 0x1p256L) { @@ -868,11 +872,14 @@ __ieee754_y1l (long double x) __sincosl (xx, &s, &c); ss = -s - c; cc = s - c; - z = __cosl (xx + xx); - if ((s * c) > 0) - cc = z / ss; - else - ss = z / cc; + if (xx <= LDBL_MAX / 2.0L) + { + z = __cosl (xx + xx); + if ((s * c) > 0) + cc = z / ss; + else + ss = z / cc; + } if (xx > 0x1p256L) return ONEOSQPI * ss / __ieee754_sqrtl (xx); |