mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-08-12 11:49:02 +08:00
Added support for scalar / array division.
This commit is contained in:
parent
8a7d16d523
commit
8cb3e36e14
@ -813,6 +813,20 @@ template<typename Scalar>
|
|||||||
struct functor_traits<scalar_pow_op<Scalar> >
|
struct functor_traits<scalar_pow_op<Scalar> >
|
||||||
{ enum { Cost = 5 * NumTraits<Scalar>::MulCost, PacketAccess = false }; };
|
{ enum { Cost = 5 * NumTraits<Scalar>::MulCost, PacketAccess = false }; };
|
||||||
|
|
||||||
|
/** \internal
|
||||||
|
* \brief Template functor to compute the quotient between a scalar and array entries.
|
||||||
|
* \sa class CwiseUnaryOp, Cwise::inverse()
|
||||||
|
*/
|
||||||
|
template<typename Scalar>
|
||||||
|
struct scalar_inverse_mult_op {
|
||||||
|
scalar_inverse_mult_op(const Scalar& other) : m_other(other) {}
|
||||||
|
inline Scalar operator() (const Scalar& a) const { return m_other / a; }
|
||||||
|
template<typename Packet>
|
||||||
|
inline const Packet packetOp(const Packet& a) const
|
||||||
|
{ return internal::pdiv(pset1<Packet>(m_other),a); }
|
||||||
|
Scalar m_other;
|
||||||
|
};
|
||||||
|
|
||||||
/** \internal
|
/** \internal
|
||||||
* \brief Template functor to compute the inverse of a scalar
|
* \brief Template functor to compute the inverse of a scalar
|
||||||
* \sa class CwiseUnaryOp, Cwise::inverse()
|
* \sa class CwiseUnaryOp, Cwise::inverse()
|
||||||
|
@ -71,6 +71,19 @@ namespace std
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Component-wise division of a scalar by array elements.
|
||||||
|
**/
|
||||||
|
template <typename Derived>
|
||||||
|
inline const Eigen::CwiseUnaryOp<Eigen::internal::scalar_inverse_mult_op<typename Derived::Scalar>, const Derived>
|
||||||
|
operator/(typename Derived::Scalar s, const Eigen::ArrayBase<Derived>& a)
|
||||||
|
{
|
||||||
|
return Eigen::CwiseUnaryOp<Eigen::internal::scalar_inverse_mult_op<typename Derived::Scalar>, const Derived>(
|
||||||
|
a.derived(),
|
||||||
|
Eigen::internal::scalar_inverse_mult_op<typename Derived::Scalar>(s)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
namespace Eigen
|
namespace Eigen
|
||||||
{
|
{
|
||||||
namespace internal
|
namespace internal
|
||||||
|
@ -45,6 +45,9 @@ template<typename ArrayType> void array(const ArrayType& m)
|
|||||||
Scalar s1 = internal::random<Scalar>(),
|
Scalar s1 = internal::random<Scalar>(),
|
||||||
s2 = internal::random<Scalar>();
|
s2 = internal::random<Scalar>();
|
||||||
|
|
||||||
|
// scalar by array division
|
||||||
|
VERIFY_IS_APPROX(s1/m1, s1 * m1.inverse());
|
||||||
|
|
||||||
// scalar addition
|
// scalar addition
|
||||||
VERIFY_IS_APPROX(m1 + s1, s1 + m1);
|
VERIFY_IS_APPROX(m1 + s1, s1 + m1);
|
||||||
VERIFY_IS_APPROX(m1 + s1, ArrayType::Constant(rows,cols,s1) + m1);
|
VERIFY_IS_APPROX(m1 + s1, ArrayType::Constant(rows,cols,s1) + m1);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user