From 575ac5409c6f6a9af219cdff3374c40e8a2a120d Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Sat, 19 Jun 2010 23:17:07 +0200 Subject: [PATCH] add missing support for std::pow(array,scalar) --- Eigen/src/Array/GlobalFunctions.h | 6 ++++++ test/array.cpp | 6 ++++++ 2 files changed, 12 insertions(+) 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()