TR-mbed 1.0
Loading...
Searching...
No Matches
SpecialFunctionsFunctors.h
Go to the documentation of this file.
1// This file is part of Eigen, a lightweight C++ template library
2// for linear algebra.
3//
4// Copyright (C) 2016 Eugene Brevdo <ebrevdo@gmail.com>
5// Copyright (C) 2016 Gael Guennebaud <gael.guennebaud@inria.fr>
6//
7// This Source Code Form is subject to the terms of the Mozilla
8// Public License v. 2.0. If a copy of the MPL was not distributed
9// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
10
11#ifndef EIGEN_SPECIALFUNCTIONS_FUNCTORS_H
12#define EIGEN_SPECIALFUNCTIONS_FUNCTORS_H
13
14namespace Eigen {
15
16namespace internal {
17
18
24template<typename Scalar> struct scalar_igamma_op : binary_op_base<Scalar,Scalar>
25{
28 using numext::igamma; return igamma(a, x);
29 }
30 template<typename Packet>
32 return internal::pigamma(a, x);
33 }
34};
35template<typename Scalar>
43
50template <typename Scalar>
54 using numext::igamma_der_a;
55 return igamma_der_a(a, x);
56 }
57 template <typename Packet>
61};
62template <typename Scalar>
70
78template <typename Scalar>
82 using numext::gamma_sample_der_alpha;
83 return gamma_sample_der_alpha(alpha, sample);
84 }
85 template <typename Packet>
88 }
89};
90template <typename Scalar>
92 enum {
93 // 2x the cost of igamma, minus the lgamma cost (the lgamma cancels out)
96 };
97};
98
104template<typename Scalar> struct scalar_igammac_op : binary_op_base<Scalar,Scalar>
105{
108 using numext::igammac; return igammac(a, x);
109 }
110 template<typename Packet>
112 {
113 return internal::pigammac(a, x);
114 }
115};
116template<typename Scalar>
124
125
130template<typename Scalar> struct scalar_betainc_op {
133 using numext::betainc; return betainc(x, a, b);
134 }
135 template<typename Packet>
137 {
138 return internal::pbetainc(x, a, b);
139 }
140};
141template<typename Scalar>
149
150
164template<typename Scalar>
173
186template<typename Scalar>
195
200template<typename Scalar> struct scalar_zeta_op {
203 using numext::zeta; return zeta(x, q);
204 }
207};
208template<typename Scalar>
217
230template<typename Scalar>
239
244template<typename Scalar> struct scalar_erf_op {
247 operator()(const Scalar& a) const {
248 return numext::erf(a);
249 }
250 template <typename Packet>
252 return perf(x);
253 }
254};
255template <typename Scalar>
257 enum {
259 Cost =
261#ifdef EIGEN_VECTORIZE_FMA
262 // TODO(rmlarsen): Move the FMA cost model to a central location.
263 // Haswell can issue 2 add/mul/madd per cycle.
264 // 10 pmadd, 2 pmul, 1 div, 2 other
268#else
272#endif
273 // Assume for simplicity that this is as expensive as an exp().
275 };
276};
277
283template<typename Scalar> struct scalar_erfc_op {
286 using numext::erfc; return erfc(a);
287 }
290};
291template<typename Scalar>
300
306template<typename Scalar> struct scalar_ndtri_op {
309 using numext::ndtri; return ndtri(a);
310 }
313};
314template<typename Scalar>
316{
317 enum {
318 // On average, We are evaluating rational functions with degree N=9 in the
319 // numerator and denominator. This results in 2*N additions and 2*N
320 // multiplications.
323 };
324};
325
326} // end namespace internal
327
328} // end namespace Eigen
329
330#endif // EIGEN_SPECIALFUNCTIONS_FUNCTORS_H
EIGEN_DEVICE_FUNC const LgammaReturnType lgamma() const
Definition ArrayCwiseUnaryOps.h:620
EIGEN_DEVICE_FUNC const NdtriReturnType ndtri() const
Definition ArrayCwiseUnaryOps.h:693
EIGEN_DEVICE_FUNC const DigammaReturnType digamma() const
Definition ArrayCwiseUnaryOps.h:637
EIGEN_DEVICE_FUNC const ErfcReturnType erfc() const
Definition ArrayCwiseUnaryOps.h:673
ArrayXXi a
Definition Array_initializer_list_23_cxx11.cpp:1
int n
Definition BiCGSTAB_simple.cpp:1
#define EIGEN_DEVICE_FUNC
Definition Macros.h:976
#define EIGEN_STRONG_INLINE
Definition Macros.h:917
#define EIGEN_EMPTY_STRUCT_CTOR(X)
Definition XprHelper.h:22
Scalar * b
Definition benchVecAdd.cpp:17
SCALAR Scalar
Definition bench_gemm.cpp:46
set noclip points set clip one set noclip two set bar set border lt lw set xdata set ydata set zdata set x2data set y2data set boxwidth set dummy x
Definition gnuplot_common_settings.hh:12
RealScalar alpha
Definition level1_cplx_impl.h:147
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet pigammac(const Packet &a, const Packet &x)
Definition SpecialFunctionsPacketMath.h:69
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pdigamma(const Packet &a)
Definition SpecialFunctionsPacketMath.h:23
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pndtri(const Packet &a)
Definition SpecialFunctionsPacketMath.h:43
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet perf(const Packet &a)
Definition SpecialFunctionsPacketMath.h:35
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet ppolygamma(const Packet &n, const Packet &x)
Definition SpecialFunctionsPacketMath.h:31
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet perfc(const Packet &a)
Definition SpecialFunctionsPacketMath.h:39
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet pbetainc(const Packet &a, const Packet &b, const Packet &x)
Definition SpecialFunctionsPacketMath.h:73
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plgamma(const Packet &a)
Definition SpecialFunctionsPacketMath.h:19
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet pigamma_der_a(const Packet &a, const Packet &x)
Definition SpecialFunctionsPacketMath.h:55
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet pgamma_sample_der_alpha(const Packet &alpha, const Packet &sample)
Definition SpecialFunctionsPacketMath.h:63
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet pigamma(const Packet &a, const Packet &x)
Definition SpecialFunctionsPacketMath.h:50
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pzeta(const Packet &x, const Packet &q)
Definition SpecialFunctionsPacketMath.h:27
Namespace containing all symbols from the Eigen library.
Definition bench_norm.cpp:85
EIGEN_STRONG_INLINE const Eigen::CwiseBinaryOp< Eigen::internal::scalar_polygamma_op< typename DerivedX::Scalar >, const DerivedN, const DerivedX > polygamma(const Eigen::ArrayBase< DerivedN > &n, const Eigen::ArrayBase< DerivedX > &x)
Definition SpecialFunctionsArrayAPI.h:112
EIGEN_STRONG_INLINE const Eigen::CwiseBinaryOp< Eigen::internal::scalar_igamma_der_a_op< typename Derived::Scalar >, const Derived, const ExponentDerived > igamma_der_a(const Eigen::ArrayBase< Derived > &a, const Eigen::ArrayBase< ExponentDerived > &x)
Definition SpecialFunctionsArrayAPI.h:51
EIGEN_STRONG_INLINE const Eigen::CwiseBinaryOp< Eigen::internal::scalar_igamma_op< typename Derived::Scalar >, const Derived, const ExponentDerived > igamma(const Eigen::ArrayBase< Derived > &a, const Eigen::ArrayBase< ExponentDerived > &x)
Definition SpecialFunctionsArrayAPI.h:28
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const TensorCwiseTernaryOp< internal::scalar_betainc_op< typename XDerived::Scalar >, const ADerived, const BDerived, const XDerived > betainc(const ADerived &a, const BDerived &b, const XDerived &x)
Definition TensorGlobalFunctions.h:24
EIGEN_STRONG_INLINE const Eigen::CwiseBinaryOp< Eigen::internal::scalar_gamma_sample_der_alpha_op< typename AlphaDerived::Scalar >, const AlphaDerived, const SampleDerived > gamma_sample_der_alpha(const Eigen::ArrayBase< AlphaDerived > &alpha, const Eigen::ArrayBase< SampleDerived > &sample)
Definition SpecialFunctionsArrayAPI.h:72
EIGEN_STRONG_INLINE const Eigen::CwiseBinaryOp< Eigen::internal::scalar_zeta_op< typename DerivedX::Scalar >, const DerivedX, const DerivedQ > zeta(const Eigen::ArrayBase< DerivedX > &x, const Eigen::ArrayBase< DerivedQ > &q)
Definition SpecialFunctionsArrayAPI.h:156
EIGEN_STRONG_INLINE const Eigen::CwiseBinaryOp< Eigen::internal::scalar_igammac_op< typename Derived::Scalar >, const Derived, const ExponentDerived > igammac(const Eigen::ArrayBase< Derived > &a, const Eigen::ArrayBase< ExponentDerived > &x)
Definition SpecialFunctionsArrayAPI.h:90
Definition BandTriangularSolver.h:13
Holds information about the various numeric (i.e. scalar) types allowed by Eigen.
Definition NumTraits.h:233
Definition BinaryFunctors.h:21
Definition XprHelper.h:176
@ PacketAccess
Definition XprHelper.h:180
@ Cost
Definition XprHelper.h:179
Definition GenericPacketMath.h:107
Definition SpecialFunctionsFunctors.h:130
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet &x, const Packet &a, const Packet &b) const
Definition SpecialFunctionsFunctors.h:136
Definition SpecialFunctionsFunctors.h:178
packet_traits< Scalar >::type Packet
Definition SpecialFunctionsFunctors.h:183
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet &a) const
Definition SpecialFunctionsFunctors.h:184
Definition XprHelper.h:710
Definition SpecialFunctionsFunctors.h:244
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet &x) const
Definition SpecialFunctionsFunctors.h:251
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator()(const Scalar &a) const
Definition SpecialFunctionsFunctors.h:247
Definition SpecialFunctionsFunctors.h:283
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet &a) const
Definition SpecialFunctionsFunctors.h:289
packet_traits< Scalar >::type Packet
Definition SpecialFunctionsFunctors.h:288
Definition SpecialFunctionsFunctors.h:79
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet &alpha, const Packet &sample) const
Definition SpecialFunctionsFunctors.h:86
Definition SpecialFunctionsFunctors.h:51
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet &a, const Packet &x) const
Definition SpecialFunctionsFunctors.h:58
Definition SpecialFunctionsFunctors.h:25
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet &a, const Packet &x) const
Definition SpecialFunctionsFunctors.h:31
Definition SpecialFunctionsFunctors.h:105
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet &a, const Packet &x) const
Definition SpecialFunctionsFunctors.h:111
Definition SpecialFunctionsFunctors.h:156
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet &a) const
Definition SpecialFunctionsFunctors.h:162
packet_traits< Scalar >::type Packet
Definition SpecialFunctionsFunctors.h:161
Definition SpecialFunctionsFunctors.h:306
packet_traits< Scalar >::type Packet
Definition SpecialFunctionsFunctors.h:311
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet &a) const
Definition SpecialFunctionsFunctors.h:312
Definition SpecialFunctionsFunctors.h:222
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet &n, const Packet &x) const
Definition SpecialFunctionsFunctors.h:228
packet_traits< Scalar >::type Packet
Definition SpecialFunctionsFunctors.h:227
Definition SpecialFunctionsFunctors.h:200
packet_traits< Scalar >::type Packet
Definition SpecialFunctionsFunctors.h:205
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet &x, const Packet &q) const
Definition SpecialFunctionsFunctors.h:206
Definition ForwardDeclarations.h:17
Definition PacketMath.h:47