11 #ifndef EIGEN_MATHFUNCTIONSIMPL_H
12 #define EIGEN_MATHFUNCTIONSIMPL_H
35 template <
typename Packet,
int Steps>
37 static_assert(Steps > 0,
"Steps must be at least 1.");
52 template <
typename Packet>
74 template <
typename Packet,
int Steps>
76 static_assert(Steps > 0,
"Steps must be at least 1.");
80 const Packet cst_minus_half = pset1<Packet>(kMinusHalf);
83 Packet inv_sqrt = approx_rsqrt;
84 for (
int step = 0; step < Steps; ++step) {
89 Packet half_r =
pmul(inv_sqrt, cst_minus_half);
91 inv_sqrt =
pmadd(half_r, h_n, inv_sqrt);
102 template <
typename Packet>
124 template <
typename Packet,
int Steps = 1>
126 static_assert(Steps > 0,
"Steps must be at least 1.");
130 const Packet one_point_five = pset1<Packet>(
Scalar(1.5));
139 for (
int step = 1; step < Steps; ++step) {
149 template <
typename RealScalar>
163 template <
typename Scalar>
168 return positive_real_hypot<RealScalar>(
abs(
x),
abs(
y));
174 template <
typename T>
205 :
x >
zero ? std::complex<T>(
w,
y / (2 *
w))
210 template <
typename T>
238 const T abs_z = numext::hypot(
x,
y);
240 const T woz =
w / abs_z;
245 :
x >
zero ? std::complex<T>(woz, -
y / (2 *
w * abs_z))
249 template <
typename T>
254 T b =
atan2(z.imag(), z.real());
AnnoyingScalar abs(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:135
AnnoyingScalar imag(const AnnoyingScalar &)
Definition: AnnoyingScalar.h:132
AnnoyingScalar sqrt(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:134
Eigen::Triplet< double > T
Definition: EigenUnitTest.cpp:11
#define EIGEN_USING_STD(FUNC)
Definition: Macros.h:1090
#define EIGEN_DEVICE_FUNC
Definition: Macros.h:892
#define EIGEN_STRONG_INLINE
Definition: Macros.h:834
RowVector3d w
Definition: Matrix_resize_int.cpp:3
float * p
Definition: Tutorial_Map_using.cpp:9
Scalar * b
Definition: benchVecAdd.cpp:17
SCALAR Scalar
Definition: bench_gemm.cpp:45
NumTraits< Scalar >::Real RealScalar
Definition: bench_gemm.cpp:46
float real
Definition: datatypes.h:10
const Scalar * a
Definition: level2_cplx_impl.h:32
Eigen::Matrix< Scalar, Dynamic, Dynamic, ColMajor > tmp
Definition: level3_impl.h:365
EIGEN_STRONG_INLINE Packet8f pzero(const Packet8f &)
Definition: AVX/PacketMath.h:774
EIGEN_STRONG_INLINE Packet8f pisnan(const Packet8f &a)
Definition: AVX/PacketMath.h:1034
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE RealScalar positive_real_hypot(const RealScalar &x, const RealScalar &y)
Definition: MathFunctionsImpl.h:150
const Scalar & y
Definition: RandomImpl.h:36
EIGEN_STRONG_INLINE Packet8h por(const Packet8h &a, const Packet8h &b)
Definition: AVX/PacketMath.h:2309
EIGEN_STRONG_INLINE Packet4f pmadd(const Packet4f &a, const Packet4f &b, const Packet4f &c)
Definition: AltiVec/PacketMath.h:1218
EIGEN_STRONG_INLINE Packet4cf pmul(const Packet4cf &a, const Packet4cf &b)
Definition: AVX/Complex.h:88
EIGEN_DEVICE_FUNC std::complex< T > complex_log(const std::complex< T > &z)
Definition: MathFunctionsImpl.h:250
EIGEN_STRONG_INLINE Packet2cf pcmp_eq(const Packet2cf &a, const Packet2cf &b)
Definition: AltiVec/Complex.h:353
EIGEN_STRONG_INLINE Packet4f pnmadd(const Packet4f &a, const Packet4f &b, const Packet4f &c)
Definition: LSX/PacketMath.h:827
EIGEN_DEVICE_FUNC std::complex< T > complex_sqrt(const std::complex< T > &a_x)
Definition: MathFunctionsImpl.h:175
EIGEN_STRONG_INLINE Packet4f pselect(const Packet4f &mask, const Packet4f &a, const Packet4f &b)
Definition: AltiVec/PacketMath.h:1474
EIGEN_DEVICE_FUNC std::complex< T > complex_rsqrt(const std::complex< T > &a_x)
Definition: MathFunctionsImpl.h:211
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T log(const T &x)
Definition: MathFunctions.h:1332
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool() isinf(const Eigen::bfloat16 &h)
Definition: BFloat16.h:747
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T maxi(const T &x, const T &y)
Definition: MathFunctions.h:926
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE std::enable_if_t< NumTraits< T >::IsSigned||NumTraits< T >::IsComplex, typename NumTraits< T >::Real > abs(const T &x)
Definition: MathFunctions.h:1355
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T rsqrt(const T &x)
Definition: MathFunctions.h:1327
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool() isnan(const Eigen::bfloat16 &h)
Definition: BFloat16.h:742
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool is_exactly_zero(const X &x)
Definition: Meta.h:592
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE float sqrt(const float &x)
Definition: arch/SSE/MathFunctions.h:69
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T mini(const T &x, const T &y)
Definition: MathFunctions.h:920
Namespace containing all symbols from the Eigen library.
Definition: bench_norm.cpp:70
AutoDiffScalar< Matrix< typename internal::traits< internal::remove_all_t< DerTypeA > >::Scalar, Dynamic, 1 > > atan2(const AutoDiffScalar< DerTypeA > &a, const AutoDiffScalar< DerTypeB > &b)
Definition: AutoDiffScalar.h:558
Definition: Eigen_Colamd.h:49
list x
Definition: plotDoE.py:28
Holds information about the various numeric (i.e. scalar) types allowed by Eigen.
Definition: NumTraits.h:217
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet run(const Packet &, const Packet &approx_rsqrt)
Definition: MathFunctionsImpl.h:54
Definition: MathFunctionsImpl.h:36
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet run(const Packet &a, const Packet &approx_a_recip)
Definition: MathFunctionsImpl.h:38
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet run(const Packet &, const Packet &approx_rsqrt)
Definition: MathFunctionsImpl.h:104
Definition: MathFunctionsImpl.h:75
typename unpacket_traits< Packet >::type Scalar
Definition: MathFunctionsImpl.h:77
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet run(const Packet &a, const Packet &approx_rsqrt)
Definition: MathFunctionsImpl.h:78
Definition: MathFunctionsImpl.h:125
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet run(const Packet &a, const Packet &approx_rsqrt)
Definition: MathFunctionsImpl.h:128
Definition: MathFunctionsImpl.h:164
NumTraits< Scalar >::Real RealScalar
Definition: MathFunctionsImpl.h:165
static EIGEN_DEVICE_FUNC RealScalar run(const Scalar &x, const Scalar &y)
Definition: MathFunctionsImpl.h:166
EIGEN_DONT_INLINE Scalar zero()
Definition: svd_common.h:232
Definition: ZVector/PacketMath.h:50