aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2012-09-08 12:16:49 +0200
committerGravatar Gael Guennebaud <g.gael@free.fr>2012-09-08 12:16:49 +0200
commit24f371bdb433745d56ae0247b08a207bdebec5b5 (patch)
tree7b024016e727ae9707d48b45e74a9792406a2380 /Eigen
parent721671cc4e5950e8cb1c905be720d4318bf9fcdb (diff)
parent1b61aadcbe0f3d8c6898d28b7605347a7643190d (diff)
Merged in jdh8/eigen (pull request PR-16)
Diffstat (limited to 'Eigen')
-rw-r--r--Eigen/src/Core/MathFunctions.h47
1 files changed, 47 insertions, 0 deletions
diff --git a/Eigen/src/Core/MathFunctions.h b/Eigen/src/Core/MathFunctions.h
index 05e913f2f..5b57c2ff2 100644
--- a/Eigen/src/Core/MathFunctions.h
+++ b/Eigen/src/Core/MathFunctions.h
@@ -520,6 +520,53 @@ inline EIGEN_MATHFUNC_RETVAL(atan2, Scalar) atan2(const Scalar& x, const Scalar&
}
/****************************************************************************
+* Implementation of atanh2 *
+****************************************************************************/
+
+template<typename Scalar, bool IsInteger>
+struct atanh2_default_impl
+{
+ typedef Scalar retval;
+ typedef typename NumTraits<Scalar>::Real RealScalar;
+ static inline Scalar run(const Scalar& x, const Scalar& y)
+ {
+ using std::abs;
+ using std::log;
+ using std::sqrt;
+ Scalar z = x / y;
+ if (abs(z) > sqrt(NumTraits<RealScalar>::epsilon()))
+ return RealScalar(0.5) * log((y + x) / (y - x));
+ else
+ return z + z*z*z / RealScalar(3);
+ }
+};
+
+template<typename Scalar>
+struct atanh2_default_impl<Scalar, true>
+{
+ static inline Scalar run(const Scalar&, const Scalar&)
+ {
+ EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar)
+ return Scalar(0);
+ }
+};
+
+template<typename Scalar>
+struct atanh2_impl : atanh2_default_impl<Scalar, NumTraits<Scalar>::IsInteger> {};
+
+template<typename Scalar>
+struct atanh2_retval
+{
+ typedef Scalar type;
+};
+
+template<typename Scalar>
+inline EIGEN_MATHFUNC_RETVAL(atanh2, Scalar) atanh2(const Scalar& x, const Scalar& y)
+{
+ return EIGEN_MATHFUNC_IMPL(atanh2, Scalar)::run(x, y);
+}
+
+/****************************************************************************
* Implementation of pow *
****************************************************************************/