summaryrefslogtreecommitdiff
path: root/sysdeps/ieee754/dbl-64/e_sinh.c
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/ieee754/dbl-64/e_sinh.c')
-rw-r--r--sysdeps/ieee754/dbl-64/e_sinh.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/sysdeps/ieee754/dbl-64/e_sinh.c b/sysdeps/ieee754/dbl-64/e_sinh.c
index 4ff28bf85d..8479bdd9b8 100644
--- a/sysdeps/ieee754/dbl-64/e_sinh.c
+++ b/sysdeps/ieee754/dbl-64/e_sinh.c
@@ -32,6 +32,7 @@ static char rcsid[] = "$NetBSD: e_sinh.c,v 1.7 1995/05/10 20:46:13 jtc Exp $";
* only sinh(0)=0 is exact for finite x.
*/
+#include <float.h>
#include <math.h>
#include <math_private.h>
@@ -58,10 +59,12 @@ __ieee754_sinh (double x)
/* |x| in [0,22], return sign(x)*0.5*(E+E/(E+1))) */
if (ix < 0x40360000) /* |x|<22 */
{
- if (__glibc_unlikely (ix < 0x3e300000)) /* |x|<2**-28 */
+ if (__glibc_unlikely (ix < 0x3e300000)) { /* |x|<2**-28 */
+ math_check_force_underflow (x);
if (shuge + x > one)
return x;
- /* sinh(tiny) = tiny with inexact */
+ /* sinh(tiny) = tiny with inexact */
+ }
t = __expm1 (fabs (x));
if (ix < 0x3ff00000)
return h * (2.0 * t - t * t / (t + one));
@@ -82,6 +85,6 @@ __ieee754_sinh (double x)
}
/* |x| > overflowthresold, sinh(x) overflow */
- return x * shuge;
+ return math_narrow_eval (x * shuge);
}
strong_alias (__ieee754_sinh, __sinh_finite)