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 + 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