diff options
author | 2015-02-26 09:42:41 -0800 | |
---|---|---|
committer | 2015-02-26 09:42:41 -0800 | |
commit | f41b1f1666e91dc674a42fed9c444c91f483133f (patch) | |
tree | f81dfac2e8e4ec0c3038cb8a814de31a7dafb9b6 /Eigen/src/Core/functors | |
parent | 8e817b65d02e6f6c2d4a0d0085212db0abe6c485 (diff) |
Added support for fast reciprocal square root computation.
Diffstat (limited to 'Eigen/src/Core/functors')
-rw-r--r-- | Eigen/src/Core/functors/UnaryFunctors.h | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/Eigen/src/Core/functors/UnaryFunctors.h b/Eigen/src/Core/functors/UnaryFunctors.h index ec42e6850..a3b5f50b1 100644 --- a/Eigen/src/Core/functors/UnaryFunctors.h +++ b/Eigen/src/Core/functors/UnaryFunctors.h @@ -225,6 +225,25 @@ struct functor_traits<scalar_sqrt_op<Scalar> > }; /** \internal + * \brief Template functor to compute the reciprocal square root of a scalar + * \sa class CwiseUnaryOp, Cwise::rsqrt() + */ +template<typename Scalar> struct scalar_rsqrt_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_rsqrt_op) + EIGEN_DEVICE_FUNC inline const Scalar operator() (const Scalar& a) const { using std::sqrt; return Scalar(1)/sqrt(a); } + typedef typename packet_traits<Scalar>::type Packet; + inline Packet packetOp(const Packet& a) const { return internal::prsqrt(a); } +}; + +template<typename Scalar> +struct functor_traits<scalar_rsqrt_op<Scalar> > +{ enum { + Cost = 5 * NumTraits<Scalar>::MulCost, + PacketAccess = packet_traits<Scalar>::HasRsqrt + }; +}; + +/** \internal * \brief Template functor to compute the cosine of a scalar * \sa class CwiseUnaryOp, ArrayBase::cos() */ |