aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--math.c5
2 files changed, 10 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 084e5805b6..0ecb01e03f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Tue Aug 2 21:42:40 2016 Chia-sheng Chen <qitar888@gmail.com>
+
+ * math.c (tanh): make faster by the extract form if three
+ hyperbolic functions are unavailable. [Feature #12647]
+
Tue Aug 2 12:37:00 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
* ext/socket/option.c, ext/socket/rubysocket.h (inet_ntop): share
diff --git a/math.c b/math.c
index eefcec3c93..b15e87113c 100644
--- a/math.c
+++ b/math.c
@@ -283,8 +283,13 @@ math_sinh(VALUE obj, VALUE x)
double
tanh(double x)
{
+# if defined(HAVE_SINH) && defined(HAVE_COSH)
const double c = cosh(x);
if (!isinf(c)) return sinh(x) / c;
+# else
+ const double e = exp(x+x);
+ if (!isinf(e)) return (e - 1) / (e + 1);
+# endif
return x > 0 ? 1.0 : -1.0;
}
#endif