xref: /aosp_15_r20/external/eigen/doc/CoeffwiseMathFunctionsTable.dox (revision bf2c37156dfe67e5dfebd6d394bad8b2ab5804d4)
1*bf2c3715SXin Linamespace Eigen {
2*bf2c3715SXin Li
3*bf2c3715SXin Li/** \eigenManualPage CoeffwiseMathFunctions Catalog of coefficient-wise math functions
4*bf2c3715SXin Li
5*bf2c3715SXin Li
6*bf2c3715SXin Li<!-- <span style="font-size:300%; color:red; font-weight: 900;">!WORK IN PROGRESS!</span> -->
7*bf2c3715SXin Li
8*bf2c3715SXin LiThis table presents a catalog of the coefficient-wise math functions supported by %Eigen.
9*bf2c3715SXin LiIn this table, \c a, \c b, refer to Array objects or expressions, and \c m refers to a linear algebra Matrix/Vector object. Standard scalar types are abbreviated as follows:
10*bf2c3715SXin Li  - \c int: \c i32
11*bf2c3715SXin Li  - \c float: \c f
12*bf2c3715SXin Li  - \c double: \c d
13*bf2c3715SXin Li  - \c std::complex<float>: \c cf
14*bf2c3715SXin Li  - \c std::complex<double>: \c cd
15*bf2c3715SXin Li
16*bf2c3715SXin LiFor each row, the first column list the equivalent calls for arrays, and matrices when supported. Of course, all functions are available for matrices by first casting it as an array: \c m.array().
17*bf2c3715SXin Li
18*bf2c3715SXin LiThe third column gives some hints in the underlying scalar implementation. In most cases, %Eigen does not implement itself the math function but relies on the STL for standard scalar types, or user-provided functions for custom scalar types.
19*bf2c3715SXin LiFor instance, some simply calls the respective function of the STL while preserving <a href="http://en.cppreference.com/w/cpp/language/adl">argument-dependent lookup</a> for custom types.
20*bf2c3715SXin LiThe following:
21*bf2c3715SXin Li\code
22*bf2c3715SXin Liusing std::foo;
23*bf2c3715SXin Lifoo(a[i]);
24*bf2c3715SXin Li\endcode
25*bf2c3715SXin Limeans that the STL's function \c std::foo will be potentially called if it is compatible with the underlying scalar type. If not, then the user must ensure that an overload of the function foo is available for the given scalar type (usually defined in the same namespace as the given scalar type).
26*bf2c3715SXin LiThis also means that, unless specified, if the function \c std::foo is available only in some recent c++ versions (e.g., c++11), then the respective %Eigen's function/method will be usable on standard types only if the compiler support the required c++ version.
27*bf2c3715SXin Li
28*bf2c3715SXin Li<table class="manual-hl">
29*bf2c3715SXin Li<tr>
30*bf2c3715SXin Li<th>API</th><th>Description</th><th>Default scalar implementation</th><th>SIMD</th>
31*bf2c3715SXin Li</tr>
32*bf2c3715SXin Li<tr><td colspan="4"></td></tr>
33*bf2c3715SXin Li<tr><th colspan="4">Basic operations</th></tr>
34*bf2c3715SXin Li<tr>
35*bf2c3715SXin Li  <td class="code">
36*bf2c3715SXin Li  \anchor cwisetable_abs
37*bf2c3715SXin Li  a.\link ArrayBase::abs abs\endlink(); \n
38*bf2c3715SXin Li  \link Eigen::abs abs\endlink(a); \n
39*bf2c3715SXin Li  m.\link MatrixBase::cwiseAbs cwiseAbs\endlink();
40*bf2c3715SXin Li  </td>
41*bf2c3715SXin Li  <td>absolute value (\f$ |a_i| \f$) </td>
42*bf2c3715SXin Li  <td class="code">
43*bf2c3715SXin Li  using <a href="http://en.cppreference.com/w/cpp/numeric/math/fabs">std::abs</a>; \n
44*bf2c3715SXin Li  abs(a[i]);
45*bf2c3715SXin Li  </td>
46*bf2c3715SXin Li  <td>SSE2, AVX (i32,f,d)</td>
47*bf2c3715SXin Li</tr>
48*bf2c3715SXin Li<tr>
49*bf2c3715SXin Li  <td class="code">
50*bf2c3715SXin Li  \anchor cwisetable_inverse
51*bf2c3715SXin Li  a.\link ArrayBase::inverse inverse\endlink(); \n
52*bf2c3715SXin Li  \link Eigen::inverse inverse\endlink(a); \n
53*bf2c3715SXin Li  m.\link MatrixBase::cwiseInverse cwiseInverse\endlink();
54*bf2c3715SXin Li  </td>
55*bf2c3715SXin Li  <td>inverse value (\f$ 1/a_i \f$) </td>
56*bf2c3715SXin Li  <td class="code">
57*bf2c3715SXin Li  1/a[i];
58*bf2c3715SXin Li  </td>
59*bf2c3715SXin Li  <td>All engines (f,d,fc,fd)</td>
60*bf2c3715SXin Li</tr>
61*bf2c3715SXin Li<tr>
62*bf2c3715SXin Li  <td class="code">
63*bf2c3715SXin Li  \anchor cwisetable_conj
64*bf2c3715SXin Li  a.\link ArrayBase::conjugate conjugate\endlink(); \n
65*bf2c3715SXin Li  \link Eigen::conj conj\endlink(a); \n
66*bf2c3715SXin Li  m.\link MatrixBase::conjugate conjugate\endlink();
67*bf2c3715SXin Li  </td>
68*bf2c3715SXin Li  <td><a href="https://en.wikipedia.org/wiki/Complex_conjugate">complex conjugate</a> (\f$ \bar{a_i} \f$),\n
69*bf2c3715SXin Li  no-op for real </td>
70*bf2c3715SXin Li  <td class="code">
71*bf2c3715SXin Li  using <a href="http://en.cppreference.com/w/cpp/numeric/complex/conj">std::conj</a>; \n
72*bf2c3715SXin Li  conj(a[i]);
73*bf2c3715SXin Li  </td>
74*bf2c3715SXin Li  <td>All engines (fc,fd)</td>
75*bf2c3715SXin Li</tr>
76*bf2c3715SXin Li<tr>
77*bf2c3715SXin Li  <td class="code">
78*bf2c3715SXin Li  \anchor cwisetable_arg
79*bf2c3715SXin Li  a.\link ArrayBase::arg arg\endlink(); \n
80*bf2c3715SXin Li  \link Eigen::arg arg\endlink(a); \n
81*bf2c3715SXin Li  m.\link MatrixBase::cwiseArg cwiseArg\endlink();
82*bf2c3715SXin Li  </td>
83*bf2c3715SXin Li  <td>phase angle of complex number</td>
84*bf2c3715SXin Li  <td class="code">
85*bf2c3715SXin Li  using <a href="http://en.cppreference.com/w/cpp/numeric/complex/arg">std::arg</a>; \n
86*bf2c3715SXin Li  arg(a[i]);
87*bf2c3715SXin Li  </td>
88*bf2c3715SXin Li  <td>All engines (fc,fd)</td>
89*bf2c3715SXin Li</tr>
90*bf2c3715SXin Li<tr>
91*bf2c3715SXin Li<th colspan="4">Exponential functions</th>
92*bf2c3715SXin Li</tr>
93*bf2c3715SXin Li<tr>
94*bf2c3715SXin Li  <td class="code">
95*bf2c3715SXin Li  \anchor cwisetable_exp
96*bf2c3715SXin Li  a.\link ArrayBase::exp exp\endlink(); \n
97*bf2c3715SXin Li  \link Eigen::exp exp\endlink(a);
98*bf2c3715SXin Li  </td>
99*bf2c3715SXin Li  <td>\f$ e \f$ raised to the given power (\f$ e^{a_i} \f$) </td>
100*bf2c3715SXin Li  <td class="code">
101*bf2c3715SXin Li  using <a href="http://en.cppreference.com/w/cpp/numeric/math/exp">std::exp</a>; \n
102*bf2c3715SXin Li  exp(a[i]);
103*bf2c3715SXin Li  </td>
104*bf2c3715SXin Li  <td>SSE2, AVX (f,d)</td>
105*bf2c3715SXin Li</tr>
106*bf2c3715SXin Li<tr>
107*bf2c3715SXin Li  <td class="code">
108*bf2c3715SXin Li  \anchor cwisetable_log
109*bf2c3715SXin Li  a.\link ArrayBase::log log\endlink(); \n
110*bf2c3715SXin Li  \link Eigen::log log\endlink(a);
111*bf2c3715SXin Li  </td>
112*bf2c3715SXin Li  <td>natural (base \f$ e \f$) logarithm (\f$ \ln({a_i}) \f$)</td>
113*bf2c3715SXin Li  <td class="code">
114*bf2c3715SXin Li  using <a href="http://en.cppreference.com/w/cpp/numeric/math/log">std::log</a>; \n
115*bf2c3715SXin Li  log(a[i]);
116*bf2c3715SXin Li  </td>
117*bf2c3715SXin Li  <td>SSE2, AVX (f)</td>
118*bf2c3715SXin Li</tr>
119*bf2c3715SXin Li<tr>
120*bf2c3715SXin Li  <td class="code">
121*bf2c3715SXin Li  \anchor cwisetable_log1p
122*bf2c3715SXin Li  a.\link ArrayBase::log1p log1p\endlink(); \n
123*bf2c3715SXin Li  \link Eigen::log1p log1p\endlink(a);
124*bf2c3715SXin Li  </td>
125*bf2c3715SXin Li  <td>natural (base \f$ e \f$) logarithm of 1 plus \n the given number (\f$ \ln({1+a_i}) \f$)</td>
126*bf2c3715SXin Li  <td>built-in generic implementation based on \c log,\n
127*bf2c3715SXin Li  plus \c using <a href="http://en.cppreference.com/w/cpp/numeric/math/log1p">\c std::log1p </a>; \cpp11</td>
128*bf2c3715SXin Li  <td></td>
129*bf2c3715SXin Li</tr>
130*bf2c3715SXin Li<tr>
131*bf2c3715SXin Li  <td class="code">
132*bf2c3715SXin Li  \anchor cwisetable_log10
133*bf2c3715SXin Li  a.\link ArrayBase::log10 log10\endlink(); \n
134*bf2c3715SXin Li  \link Eigen::log10 log10\endlink(a);
135*bf2c3715SXin Li  </td>
136*bf2c3715SXin Li  <td>base 10 logarithm (\f$ \log_{10}({a_i}) \f$)</td>
137*bf2c3715SXin Li  <td class="code">
138*bf2c3715SXin Li  using <a href="http://en.cppreference.com/w/cpp/numeric/math/log10">std::log10</a>; \n
139*bf2c3715SXin Li  log10(a[i]);
140*bf2c3715SXin Li  </td>
141*bf2c3715SXin Li  <td></td>
142*bf2c3715SXin Li</tr>
143*bf2c3715SXin Li<tr>
144*bf2c3715SXin Li<th colspan="4">Power functions</th>
145*bf2c3715SXin Li</tr>
146*bf2c3715SXin Li<tr>
147*bf2c3715SXin Li  <td class="code">
148*bf2c3715SXin Li  \anchor cwisetable_pow
149*bf2c3715SXin Li  a.\link ArrayBase::pow pow\endlink(b); \n
150*bf2c3715SXin Li  \link ArrayBase::pow(const Eigen::ArrayBase< Derived > &x, const Eigen::ArrayBase< ExponentDerived > &exponents) pow\endlink(a,b);
151*bf2c3715SXin Li  </td>
152*bf2c3715SXin Li  <!-- For some reason Doxygen thinks that pow is in ArrayBase namespace -->
153*bf2c3715SXin Li  <td>raises a number to the given power (\f$ a_i ^ {b_i} \f$) \n \c a and \c b can be either an array or scalar.</td>
154*bf2c3715SXin Li  <td class="code">
155*bf2c3715SXin Li  using <a href="http://en.cppreference.com/w/cpp/numeric/math/pow">std::pow</a>; \n
156*bf2c3715SXin Li  pow(a[i],b[i]);\n
157*bf2c3715SXin Li  (plus builtin for integer types)</td>
158*bf2c3715SXin Li  <td></td>
159*bf2c3715SXin Li</tr>
160*bf2c3715SXin Li<tr>
161*bf2c3715SXin Li  <td class="code">
162*bf2c3715SXin Li  \anchor cwisetable_sqrt
163*bf2c3715SXin Li  a.\link ArrayBase::sqrt sqrt\endlink(); \n
164*bf2c3715SXin Li  \link Eigen::sqrt sqrt\endlink(a);\n
165*bf2c3715SXin Li  m.\link MatrixBase::cwiseSqrt cwiseSqrt\endlink();
166*bf2c3715SXin Li  </td>
167*bf2c3715SXin Li  <td>computes square root (\f$ \sqrt a_i \f$)</td>
168*bf2c3715SXin Li  <td class="code">
169*bf2c3715SXin Li  using <a href="http://en.cppreference.com/w/cpp/numeric/math/sqrt">std::sqrt</a>; \n
170*bf2c3715SXin Li  sqrt(a[i]);</td>
171*bf2c3715SXin Li  <td>SSE2, AVX (f,d)</td>
172*bf2c3715SXin Li</tr>
173*bf2c3715SXin Li<tr>
174*bf2c3715SXin Li  <td class="code">
175*bf2c3715SXin Li  \anchor cwisetable_rsqrt
176*bf2c3715SXin Li  a.\link ArrayBase::rsqrt rsqrt\endlink(); \n
177*bf2c3715SXin Li  \link Eigen::rsqrt rsqrt\endlink(a);
178*bf2c3715SXin Li  </td>
179*bf2c3715SXin Li  <td><a href="https://en.wikipedia.org/wiki/Fast_inverse_square_root">reciprocal square root</a> (\f$ 1/{\sqrt a_i} \f$)</td>
180*bf2c3715SXin Li  <td class="code">
181*bf2c3715SXin Li  using <a href="http://en.cppreference.com/w/cpp/numeric/math/sqrt">std::sqrt</a>; \n
182*bf2c3715SXin Li  1/sqrt(a[i]); \n
183*bf2c3715SXin Li  </td>
184*bf2c3715SXin Li  <td>SSE2, AVX, AltiVec, ZVector (f,d)\n
185*bf2c3715SXin Li  (approx + 1 Newton iteration)</td>
186*bf2c3715SXin Li</tr>
187*bf2c3715SXin Li<tr>
188*bf2c3715SXin Li  <td class="code">
189*bf2c3715SXin Li  \anchor cwisetable_square
190*bf2c3715SXin Li  a.\link ArrayBase::square square\endlink(); \n
191*bf2c3715SXin Li  \link Eigen::square square\endlink(a);
192*bf2c3715SXin Li  </td>
193*bf2c3715SXin Li  <td>computes square power (\f$ a_i^2 \f$)</td>
194*bf2c3715SXin Li  <td class="code">
195*bf2c3715SXin Li  a[i]*a[i]</td>
196*bf2c3715SXin Li  <td>All (i32,f,d,cf,cd)</td>
197*bf2c3715SXin Li</tr>
198*bf2c3715SXin Li<tr>
199*bf2c3715SXin Li  <td class="code">
200*bf2c3715SXin Li  \anchor cwisetable_cube
201*bf2c3715SXin Li  a.\link ArrayBase::cube cube\endlink(); \n
202*bf2c3715SXin Li  \link Eigen::cube cube\endlink(a);
203*bf2c3715SXin Li  </td>
204*bf2c3715SXin Li  <td>computes cubic power (\f$ a_i^3 \f$)</td>
205*bf2c3715SXin Li  <td class="code">
206*bf2c3715SXin Li  a[i]*a[i]*a[i]</td>
207*bf2c3715SXin Li  <td>All (i32,f,d,cf,cd)</td>
208*bf2c3715SXin Li</tr>
209*bf2c3715SXin Li<tr>
210*bf2c3715SXin Li  <td class="code">
211*bf2c3715SXin Li  \anchor cwisetable_abs2
212*bf2c3715SXin Li  a.\link ArrayBase::abs2 abs2\endlink(); \n
213*bf2c3715SXin Li  \link Eigen::abs2 abs2\endlink(a);\n
214*bf2c3715SXin Li  m.\link MatrixBase::cwiseAbs2 cwiseAbs2\endlink();
215*bf2c3715SXin Li  </td>
216*bf2c3715SXin Li  <td>computes the squared absolute value (\f$ |a_i|^2 \f$)</td>
217*bf2c3715SXin Li  <td class="code">
218*bf2c3715SXin Li  real:    a[i]*a[i] \n
219*bf2c3715SXin Li  complex:  real(a[i])*real(a[i]) \n
220*bf2c3715SXin Li  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + imag(a[i])*imag(a[i])</td>
221*bf2c3715SXin Li  <td>All (i32,f,d)</td>
222*bf2c3715SXin Li</tr>
223*bf2c3715SXin Li<tr>
224*bf2c3715SXin Li<th colspan="4">Trigonometric functions</th>
225*bf2c3715SXin Li</tr>
226*bf2c3715SXin Li<tr>
227*bf2c3715SXin Li  <td class="code">
228*bf2c3715SXin Li  \anchor cwisetable_sin
229*bf2c3715SXin Li  a.\link ArrayBase::sin sin\endlink(); \n
230*bf2c3715SXin Li  \link Eigen::sin sin\endlink(a);
231*bf2c3715SXin Li  </td>
232*bf2c3715SXin Li  <td>computes sine</td>
233*bf2c3715SXin Li  <td class="code">
234*bf2c3715SXin Li  using <a href="http://en.cppreference.com/w/cpp/numeric/math/sin">std::sin</a>; \n
235*bf2c3715SXin Li  sin(a[i]);</td>
236*bf2c3715SXin Li  <td>SSE2, AVX (f)</td>
237*bf2c3715SXin Li</tr>
238*bf2c3715SXin Li<tr>
239*bf2c3715SXin Li  <td class="code">
240*bf2c3715SXin Li  \anchor cwisetable_cos
241*bf2c3715SXin Li  a.\link ArrayBase::cos cos\endlink(); \n
242*bf2c3715SXin Li  \link Eigen::cos cos\endlink(a);
243*bf2c3715SXin Li  </td>
244*bf2c3715SXin Li  <td>computes cosine</td>
245*bf2c3715SXin Li  <td class="code">
246*bf2c3715SXin Li  using <a href="http://en.cppreference.com/w/cpp/numeric/math/cos">std::cos</a>; \n
247*bf2c3715SXin Li  cos(a[i]);</td>
248*bf2c3715SXin Li  <td>SSE2, AVX (f)</td>
249*bf2c3715SXin Li</tr>
250*bf2c3715SXin Li<tr>
251*bf2c3715SXin Li  <td class="code">
252*bf2c3715SXin Li  \anchor cwisetable_tan
253*bf2c3715SXin Li  a.\link ArrayBase::tan tan\endlink(); \n
254*bf2c3715SXin Li  \link Eigen::tan tan\endlink(a);
255*bf2c3715SXin Li  </td>
256*bf2c3715SXin Li  <td>computes tangent</td>
257*bf2c3715SXin Li  <td class="code">
258*bf2c3715SXin Li  using <a href="http://en.cppreference.com/w/cpp/numeric/math/tan">std::tan</a>; \n
259*bf2c3715SXin Li  tan(a[i]);</td>
260*bf2c3715SXin Li  <td></td>
261*bf2c3715SXin Li</tr>
262*bf2c3715SXin Li<tr>
263*bf2c3715SXin Li  <td class="code">
264*bf2c3715SXin Li  \anchor cwisetable_asin
265*bf2c3715SXin Li  a.\link ArrayBase::asin asin\endlink(); \n
266*bf2c3715SXin Li  \link Eigen::asin asin\endlink(a);
267*bf2c3715SXin Li  </td>
268*bf2c3715SXin Li  <td>computes arc sine (\f$ \sin^{-1} a_i \f$)</td>
269*bf2c3715SXin Li  <td class="code">
270*bf2c3715SXin Li  using <a href="http://en.cppreference.com/w/cpp/numeric/math/asin">std::asin</a>; \n
271*bf2c3715SXin Li  asin(a[i]);</td>
272*bf2c3715SXin Li  <td></td>
273*bf2c3715SXin Li</tr>
274*bf2c3715SXin Li<tr>
275*bf2c3715SXin Li  <td class="code">
276*bf2c3715SXin Li  \anchor cwisetable_acos
277*bf2c3715SXin Li  a.\link ArrayBase::acos acos\endlink(); \n
278*bf2c3715SXin Li  \link Eigen::acos acos\endlink(a);
279*bf2c3715SXin Li  </td>
280*bf2c3715SXin Li  <td>computes arc cosine  (\f$ \cos^{-1} a_i \f$)</td>
281*bf2c3715SXin Li  <td class="code">
282*bf2c3715SXin Li  using <a href="http://en.cppreference.com/w/cpp/numeric/math/acos">std::acos</a>; \n
283*bf2c3715SXin Li  acos(a[i]);</td>
284*bf2c3715SXin Li  <td></td>
285*bf2c3715SXin Li</tr>
286*bf2c3715SXin Li<tr>
287*bf2c3715SXin Li  <td class="code">
288*bf2c3715SXin Li  \anchor cwisetable_atan
289*bf2c3715SXin Li  a.\link ArrayBase::atan atan\endlink(); \n
290*bf2c3715SXin Li  \link Eigen::atan atan\endlink(a);
291*bf2c3715SXin Li  </td>
292*bf2c3715SXin Li  <td>computes arc tangent (\f$ \tan^{-1} a_i \f$)</td>
293*bf2c3715SXin Li  <td class="code">
294*bf2c3715SXin Li  using <a href="http://en.cppreference.com/w/cpp/numeric/math/atan">std::atan</a>; \n
295*bf2c3715SXin Li  atan(a[i]);</td>
296*bf2c3715SXin Li  <td></td>
297*bf2c3715SXin Li</tr>
298*bf2c3715SXin Li<tr>
299*bf2c3715SXin Li<th colspan="4">Hyperbolic functions</th>
300*bf2c3715SXin Li</tr>
301*bf2c3715SXin Li<tr>
302*bf2c3715SXin Li  <td class="code">
303*bf2c3715SXin Li  \anchor cwisetable_sinh
304*bf2c3715SXin Li  a.\link ArrayBase::sinh sinh\endlink(); \n
305*bf2c3715SXin Li  \link Eigen::sinh sinh\endlink(a);
306*bf2c3715SXin Li  </td>
307*bf2c3715SXin Li  <td>computes hyperbolic sine</td>
308*bf2c3715SXin Li  <td class="code">
309*bf2c3715SXin Li  using <a href="http://en.cppreference.com/w/cpp/numeric/math/sinh">std::sinh</a>; \n
310*bf2c3715SXin Li  sinh(a[i]);</td>
311*bf2c3715SXin Li  <td></td>
312*bf2c3715SXin Li</tr>
313*bf2c3715SXin Li<tr>
314*bf2c3715SXin Li  <td class="code">
315*bf2c3715SXin Li  \anchor cwisetable_cosh
316*bf2c3715SXin Li  a.\link ArrayBase::cosh cohs\endlink(); \n
317*bf2c3715SXin Li  \link Eigen::cosh cosh\endlink(a);
318*bf2c3715SXin Li  </td>
319*bf2c3715SXin Li  <td>computes hyperbolic cosine</td>
320*bf2c3715SXin Li  <td class="code">
321*bf2c3715SXin Li  using <a href="http://en.cppreference.com/w/cpp/numeric/math/cosh">std::cosh</a>; \n
322*bf2c3715SXin Li  cosh(a[i]);</td>
323*bf2c3715SXin Li  <td></td>
324*bf2c3715SXin Li</tr>
325*bf2c3715SXin Li<tr>
326*bf2c3715SXin Li  <td class="code">
327*bf2c3715SXin Li  \anchor cwisetable_tanh
328*bf2c3715SXin Li  a.\link ArrayBase::tanh tanh\endlink(); \n
329*bf2c3715SXin Li  \link Eigen::tanh tanh\endlink(a);
330*bf2c3715SXin Li  </td>
331*bf2c3715SXin Li  <td>computes hyperbolic tangent</td>
332*bf2c3715SXin Li  <td class="code">
333*bf2c3715SXin Li  using <a href="http://en.cppreference.com/w/cpp/numeric/math/tanh">std::tanh</a>; \n
334*bf2c3715SXin Li  tanh(a[i]);</td>
335*bf2c3715SXin Li  <td></td>
336*bf2c3715SXin Li</tr>
337*bf2c3715SXin Li<tr>
338*bf2c3715SXin Li  <td class="code">
339*bf2c3715SXin Li  \anchor cwisetable_asinh
340*bf2c3715SXin Li  a.\link ArrayBase::asinh asinh\endlink(); \n
341*bf2c3715SXin Li  \link Eigen::asinh asinh\endlink(a);
342*bf2c3715SXin Li  </td>
343*bf2c3715SXin Li  <td>computes inverse hyperbolic sine</td>
344*bf2c3715SXin Li  <td class="code">
345*bf2c3715SXin Li  using <a href="http://en.cppreference.com/w/cpp/numeric/math/asinh">std::asinh</a>; \n
346*bf2c3715SXin Li  asinh(a[i]);</td>
347*bf2c3715SXin Li  <td></td>
348*bf2c3715SXin Li</tr>
349*bf2c3715SXin Li<tr>
350*bf2c3715SXin Li  <td class="code">
351*bf2c3715SXin Li  \anchor cwisetable_acosh
352*bf2c3715SXin Li  a.\link ArrayBase::acosh cohs\endlink(); \n
353*bf2c3715SXin Li  \link Eigen::acosh acosh\endlink(a);
354*bf2c3715SXin Li  </td>
355*bf2c3715SXin Li  <td>computes hyperbolic cosine</td>
356*bf2c3715SXin Li  <td class="code">
357*bf2c3715SXin Li  using <a href="http://en.cppreference.com/w/cpp/numeric/math/acosh">std::acosh</a>; \n
358*bf2c3715SXin Li  acosh(a[i]);</td>
359*bf2c3715SXin Li  <td></td>
360*bf2c3715SXin Li</tr>
361*bf2c3715SXin Li<tr>
362*bf2c3715SXin Li  <td class="code">
363*bf2c3715SXin Li  \anchor cwisetable_atanh
364*bf2c3715SXin Li  a.\link ArrayBase::atanh atanh\endlink(); \n
365*bf2c3715SXin Li  \link Eigen::atanh atanh\endlink(a);
366*bf2c3715SXin Li  </td>
367*bf2c3715SXin Li  <td>computes hyperbolic tangent</td>
368*bf2c3715SXin Li  <td class="code">
369*bf2c3715SXin Li  using <a href="http://en.cppreference.com/w/cpp/numeric/math/atanh">std::atanh</a>; \n
370*bf2c3715SXin Li  atanh(a[i]);</td>
371*bf2c3715SXin Li  <td></td>
372*bf2c3715SXin Li</tr>
373*bf2c3715SXin Li<tr>
374*bf2c3715SXin Li<th colspan="4">Nearest integer floating point operations</th>
375*bf2c3715SXin Li</tr>
376*bf2c3715SXin Li<tr>
377*bf2c3715SXin Li  <td class="code">
378*bf2c3715SXin Li  \anchor cwisetable_ceil
379*bf2c3715SXin Li  a.\link ArrayBase::ceil ceil\endlink(); \n
380*bf2c3715SXin Li  \link Eigen::ceil ceil\endlink(a);
381*bf2c3715SXin Li  </td>
382*bf2c3715SXin Li  <td>nearest integer not less than the given value</td>
383*bf2c3715SXin Li  <td class="code">
384*bf2c3715SXin Li  using <a href="http://en.cppreference.com/w/cpp/numeric/math/ceil">std::ceil</a>; \n
385*bf2c3715SXin Li  ceil(a[i]);</td>
386*bf2c3715SXin Li  <td>SSE4,AVX,ZVector (f,d)</td>
387*bf2c3715SXin Li</tr>
388*bf2c3715SXin Li<tr>
389*bf2c3715SXin Li  <td class="code">
390*bf2c3715SXin Li  \anchor cwisetable_floor
391*bf2c3715SXin Li  a.\link ArrayBase::floor floor\endlink(); \n
392*bf2c3715SXin Li  \link Eigen::floor floor\endlink(a);
393*bf2c3715SXin Li  </td>
394*bf2c3715SXin Li  <td>nearest integer not greater than the given value</td>
395*bf2c3715SXin Li  <td class="code">
396*bf2c3715SXin Li  using <a href="http://en.cppreference.com/w/cpp/numeric/math/floor">std::floor</a>; \n
397*bf2c3715SXin Li  floor(a[i]);</td>
398*bf2c3715SXin Li  <td>SSE4,AVX,ZVector (f,d)</td>
399*bf2c3715SXin Li</tr>
400*bf2c3715SXin Li<tr>
401*bf2c3715SXin Li  <td class="code">
402*bf2c3715SXin Li  \anchor cwisetable_round
403*bf2c3715SXin Li  a.\link ArrayBase::round round\endlink(); \n
404*bf2c3715SXin Li  \link Eigen::round round\endlink(a);
405*bf2c3715SXin Li  </td>
406*bf2c3715SXin Li  <td>nearest integer, \n rounding away from zero in halfway cases</td>
407*bf2c3715SXin Li  <td>built-in generic implementation \n based on \c floor and \c ceil,\n
408*bf2c3715SXin Li  plus \c using <a href="http://en.cppreference.com/w/cpp/numeric/math/round">\c std::round </a>; \cpp11</td>
409*bf2c3715SXin Li  <td>SSE4,AVX,ZVector (f,d)</td>
410*bf2c3715SXin Li</tr>
411*bf2c3715SXin Li<tr>
412*bf2c3715SXin Li  <td class="code">
413*bf2c3715SXin Li  \anchor cwisetable_rint
414*bf2c3715SXin Li  a.\link ArrayBase::rint rint\endlink(); \n
415*bf2c3715SXin Li  \link Eigen::rint rint\endlink(a);
416*bf2c3715SXin Li  </td>
417*bf2c3715SXin Li  <td>nearest integer, \n rounding to nearest even in halfway cases</td>
418*bf2c3715SXin Li  <td>built-in generic implementation using <a href="http://en.cppreference.com/w/cpp/numeric/math/rint">\c std::rint </a>; \cpp11
419*bf2c3715SXin Li  or <a href="http://en.cppreference.com/w/c/numeric/math/rint">\c rintf </a>; </td>
420*bf2c3715SXin Li  <td>SSE4,AVX (f,d)</td>
421*bf2c3715SXin Li</tr>
422*bf2c3715SXin Li<tr>
423*bf2c3715SXin Li<th colspan="4">Floating point manipulation functions</th>
424*bf2c3715SXin Li</tr>
425*bf2c3715SXin Li<tr>
426*bf2c3715SXin Li<th colspan="4">Classification and comparison</th>
427*bf2c3715SXin Li</tr>
428*bf2c3715SXin Li<tr>
429*bf2c3715SXin Li  <td class="code">
430*bf2c3715SXin Li  \anchor cwisetable_isfinite
431*bf2c3715SXin Li  a.\link ArrayBase::isFinite isFinite\endlink(); \n
432*bf2c3715SXin Li  \link Eigen::isfinite isfinite\endlink(a);
433*bf2c3715SXin Li  </td>
434*bf2c3715SXin Li  <td>checks if the given number has finite value</td>
435*bf2c3715SXin Li  <td>built-in generic implementation,\n
436*bf2c3715SXin Li  plus \c using <a href="http://en.cppreference.com/w/cpp/numeric/math/isfinite">\c std::isfinite </a>; \cpp11</td>
437*bf2c3715SXin Li  <td></td>
438*bf2c3715SXin Li</tr>
439*bf2c3715SXin Li<tr>
440*bf2c3715SXin Li  <td class="code">
441*bf2c3715SXin Li  \anchor cwisetable_isinf
442*bf2c3715SXin Li  a.\link ArrayBase::isInf isInf\endlink(); \n
443*bf2c3715SXin Li  \link Eigen::isinf isinf\endlink(a);
444*bf2c3715SXin Li  </td>
445*bf2c3715SXin Li  <td>checks if the given number is infinite</td>
446*bf2c3715SXin Li  <td>built-in generic implementation,\n
447*bf2c3715SXin Li  plus \c using <a href="http://en.cppreference.com/w/cpp/numeric/math/isinf">\c std::isinf </a>; \cpp11</td>
448*bf2c3715SXin Li  <td></td>
449*bf2c3715SXin Li</tr>
450*bf2c3715SXin Li<tr>
451*bf2c3715SXin Li  <td class="code">
452*bf2c3715SXin Li  \anchor cwisetable_isnan
453*bf2c3715SXin Li  a.\link ArrayBase::isNaN isNaN\endlink(); \n
454*bf2c3715SXin Li  \link Eigen::isnan isnan\endlink(a);
455*bf2c3715SXin Li  </td>
456*bf2c3715SXin Li  <td>checks if the given number is not a number</td>
457*bf2c3715SXin Li  <td>built-in generic implementation,\n
458*bf2c3715SXin Li  plus \c using <a href="http://en.cppreference.com/w/cpp/numeric/math/isnan">\c std::isnan </a>; \cpp11</td>
459*bf2c3715SXin Li  <td></td>
460*bf2c3715SXin Li</tr>
461*bf2c3715SXin Li<tr>
462*bf2c3715SXin Li<th colspan="4">Error and gamma functions</th>
463*bf2c3715SXin Li</tr>
464*bf2c3715SXin Li<tr> <td colspan="4">  Require \c \#include \c <unsupported/Eigen/SpecialFunctions> </td></tr>
465*bf2c3715SXin Li<tr>
466*bf2c3715SXin Li  <td class="code">
467*bf2c3715SXin Li  \anchor cwisetable_erf
468*bf2c3715SXin Li  a.\link ArrayBase::erf erf\endlink(); \n
469*bf2c3715SXin Li  \link Eigen::erf erf\endlink(a);
470*bf2c3715SXin Li  </td>
471*bf2c3715SXin Li  <td>error function</td>
472*bf2c3715SXin Li  <td class="code">
473*bf2c3715SXin Li  using <a href="http://en.cppreference.com/w/cpp/numeric/math/erf">std::erf</a>; \cpp11 \n
474*bf2c3715SXin Li  erf(a[i]);
475*bf2c3715SXin Li  </td>
476*bf2c3715SXin Li  <td></td>
477*bf2c3715SXin Li</tr>
478*bf2c3715SXin Li<tr>
479*bf2c3715SXin Li  <td class="code">
480*bf2c3715SXin Li  \anchor cwisetable_erfc
481*bf2c3715SXin Li  a.\link ArrayBase::erfc erfc\endlink(); \n
482*bf2c3715SXin Li  \link Eigen::erfc erfc\endlink(a);
483*bf2c3715SXin Li  </td>
484*bf2c3715SXin Li  <td>complementary error function</td>
485*bf2c3715SXin Li  <td class="code">
486*bf2c3715SXin Li  using <a href="http://en.cppreference.com/w/cpp/numeric/math/erfc">std::erfc</a>; \cpp11 \n
487*bf2c3715SXin Li  erfc(a[i]);
488*bf2c3715SXin Li  </td>
489*bf2c3715SXin Li  <td></td>
490*bf2c3715SXin Li</tr>
491*bf2c3715SXin Li<tr>
492*bf2c3715SXin Li  <td class="code">
493*bf2c3715SXin Li  \anchor cwisetable_lgamma
494*bf2c3715SXin Li  a.\link ArrayBase::lgamma lgamma\endlink(); \n
495*bf2c3715SXin Li  \link Eigen::lgamma lgamma\endlink(a);
496*bf2c3715SXin Li  </td>
497*bf2c3715SXin Li  <td>natural logarithm of the gamma function</td>
498*bf2c3715SXin Li  <td class="code">
499*bf2c3715SXin Li  using <a href="http://en.cppreference.com/w/cpp/numeric/math/lgamma">std::lgamma</a>; \cpp11 \n
500*bf2c3715SXin Li  lgamma(a[i]);
501*bf2c3715SXin Li  </td>
502*bf2c3715SXin Li  <td></td>
503*bf2c3715SXin Li</tr>
504*bf2c3715SXin Li<tr>
505*bf2c3715SXin Li  <td class="code">
506*bf2c3715SXin Li  \anchor cwisetable_digamma
507*bf2c3715SXin Li  a.\link ArrayBase::digamma digamma\endlink(); \n
508*bf2c3715SXin Li  \link Eigen::digamma digamma\endlink(a);
509*bf2c3715SXin Li  </td>
510*bf2c3715SXin Li  <td><a href="https://en.wikipedia.org/wiki/Digamma_function">logarithmic derivative of the gamma function</a></td>
511*bf2c3715SXin Li  <td>
512*bf2c3715SXin Li  built-in for float and double
513*bf2c3715SXin Li  </td>
514*bf2c3715SXin Li  <td></td>
515*bf2c3715SXin Li</tr>
516*bf2c3715SXin Li<tr>
517*bf2c3715SXin Li  <td class="code">
518*bf2c3715SXin Li  \anchor cwisetable_igamma
519*bf2c3715SXin Li  \link Eigen::igamma igamma\endlink(a,x);
520*bf2c3715SXin Li  </td>
521*bf2c3715SXin Li  <td><a href="https://en.wikipedia.org/wiki/Incomplete_gamma_function">lower incomplete gamma integral</a>
522*bf2c3715SXin Li  \n \f$ \gamma(a_i,x_i)= \frac{1}{|a_i|} \int_{0}^{x_i}e^{\text{-}t} t^{a_i-1} \mathrm{d} t \f$</td>
523*bf2c3715SXin Li  <td>
524*bf2c3715SXin Li  built-in for float and double,\n but requires \cpp11
525*bf2c3715SXin Li  </td>
526*bf2c3715SXin Li  <td></td>
527*bf2c3715SXin Li</tr>
528*bf2c3715SXin Li<tr>
529*bf2c3715SXin Li  <td class="code">
530*bf2c3715SXin Li  \anchor cwisetable_igammac
531*bf2c3715SXin Li  \link Eigen::igammac igammac\endlink(a,x);
532*bf2c3715SXin Li  </td>
533*bf2c3715SXin Li  <td><a href="https://en.wikipedia.org/wiki/Incomplete_gamma_function">upper incomplete gamma integral</a>
534*bf2c3715SXin Li  \n \f$ \Gamma(a_i,x_i) = \frac{1}{|a_i|} \int_{x_i}^{\infty}e^{\text{-}t} t^{a_i-1} \mathrm{d} t \f$</td>
535*bf2c3715SXin Li  <td>
536*bf2c3715SXin Li  built-in for float and double,\n but requires \cpp11
537*bf2c3715SXin Li  </td>
538*bf2c3715SXin Li  <td></td>
539*bf2c3715SXin Li</tr>
540*bf2c3715SXin Li<tr>
541*bf2c3715SXin Li<th colspan="4">Special functions</th>
542*bf2c3715SXin Li</tr>
543*bf2c3715SXin Li<tr> <td colspan="4">  Require \c \#include \c <unsupported/Eigen/SpecialFunctions> </td></tr>
544*bf2c3715SXin Li<tr>
545*bf2c3715SXin Li  <td class="code">
546*bf2c3715SXin Li  \anchor cwisetable_polygamma
547*bf2c3715SXin Li  \link Eigen::polygamma polygamma\endlink(n,x);
548*bf2c3715SXin Li  </td>
549*bf2c3715SXin Li  <td><a href="https://en.wikipedia.org/wiki/Polygamma_function">n-th derivative of digamma at x</a></td>
550*bf2c3715SXin Li  <td>
551*bf2c3715SXin Li  built-in generic based on\n <a href="#cwisetable_lgamma">\c lgamma </a>,
552*bf2c3715SXin Li  <a href="#cwisetable_digamma"> \c digamma </a>
553*bf2c3715SXin Li  and <a href="#cwisetable_zeta">\c zeta </a>.
554*bf2c3715SXin Li  </td>
555*bf2c3715SXin Li  <td></td>
556*bf2c3715SXin Li</tr>
557*bf2c3715SXin Li<tr>
558*bf2c3715SXin Li  <td class="code">
559*bf2c3715SXin Li  \anchor cwisetable_betainc
560*bf2c3715SXin Li  \link Eigen::betainc betainc\endlink(a,b,x);
561*bf2c3715SXin Li  </td>
562*bf2c3715SXin Li  <td><a href="https://en.wikipedia.org/wiki/Beta_function#Incomplete_beta_function">Incomplete beta function</a></td>
563*bf2c3715SXin Li  <td>
564*bf2c3715SXin Li  built-in for float and double,\n but requires \cpp11
565*bf2c3715SXin Li  </td>
566*bf2c3715SXin Li  <td></td>
567*bf2c3715SXin Li</tr>
568*bf2c3715SXin Li<tr>
569*bf2c3715SXin Li  <td class="code">
570*bf2c3715SXin Li  \anchor cwisetable_zeta
571*bf2c3715SXin Li  \link Eigen::zeta zeta\endlink(a,b); \n
572*bf2c3715SXin Li  a.\link ArrayBase::zeta zeta\endlink(b);
573*bf2c3715SXin Li  </td>
574*bf2c3715SXin Li  <td><a href="https://en.wikipedia.org/wiki/Hurwitz_zeta_function">Hurwitz zeta function</a>
575*bf2c3715SXin Li  \n \f$ \zeta(a_i,b_i)=\sum_{k=0}^{\infty}(b_i+k)^{\text{-}a_i} \f$</td>
576*bf2c3715SXin Li  <td>
577*bf2c3715SXin Li  built-in for float and double
578*bf2c3715SXin Li  </td>
579*bf2c3715SXin Li  <td></td>
580*bf2c3715SXin Li</tr>
581*bf2c3715SXin Li<tr>
582*bf2c3715SXin Li  <td class="code">
583*bf2c3715SXin Li  \anchor cwisetable_ndtri
584*bf2c3715SXin Li  a.\link ArrayBase::ndtri ndtri\endlink(); \n
585*bf2c3715SXin Li  \link Eigen::ndtri ndtri\endlink(a);
586*bf2c3715SXin Li  </td>
587*bf2c3715SXin Li  <td>Inverse of the CDF of the Normal distribution function</td>
588*bf2c3715SXin Li  <td>
589*bf2c3715SXin Li  built-in for float and double
590*bf2c3715SXin Li  </td>
591*bf2c3715SXin Li  <td></td>
592*bf2c3715SXin Li</tr>
593*bf2c3715SXin Li<tr><td colspan="4"></td></tr>
594*bf2c3715SXin Li</table>
595*bf2c3715SXin Li
596*bf2c3715SXin Li\n
597*bf2c3715SXin Li
598*bf2c3715SXin Li*/
599*bf2c3715SXin Li
600*bf2c3715SXin Li}
601