diff --git a/Eigen/src/Array/GlobalFunctions.h b/Eigen/src/Array/GlobalFunctions.h index 5de87e604..14825656b 100644 --- a/Eigen/src/Array/GlobalFunctions.h +++ b/Eigen/src/Array/GlobalFunctions.h @@ -60,6 +60,12 @@ namespace std EIGEN_ARRAY_DECLARE_GLOBAL_STD_UNARY(log,ei_scalar_log_op) EIGEN_ARRAY_DECLARE_GLOBAL_STD_UNARY(abs,ei_scalar_abs_op) EIGEN_ARRAY_DECLARE_GLOBAL_STD_UNARY(sqrt,ei_scalar_sqrt_op) + + template + inline const Eigen::CwiseUnaryOp, Derived> + pow(const Eigen::ArrayBase& x, const typename Derived::Scalar& exponent) { \ + return x.derived().pow(exponent); \ + } } namespace Eigen diff --git a/test/array.cpp b/test/array.cpp index b1fa45b12..7f44b7d5d 100644 --- a/test/array.cpp +++ b/test/array.cpp @@ -171,6 +171,12 @@ template void array_real(const ArrayType& m) VERIFY_IS_APPROX(m1.exp() * m2.exp(), std::exp(m1+m2)); VERIFY_IS_APPROX(m1.exp(), ei_exp(m1)); VERIFY_IS_APPROX(m1.exp() / m2.exp(), std::exp(m1-m2)); + + VERIFY_IS_APPROX(m1.pow(2), m1.square()); + VERIFY_IS_APPROX(std::pow(m1,2), m1.square()); + m3 = m1.abs(); + VERIFY_IS_APPROX(m3.pow(RealScalar(0.5)), m3.sqrt()); + VERIFY_IS_APPROX(std::pow(m3,RealScalar(0.5)), m3.sqrt()); } void test_array()