cppduals
0.5.4
Dual numbers for C++
|
Dual number class. More...
Go to the source code of this file.
Classes | |
struct | duals::is_dual< T > |
Check if T is dual<>, match non-duals. More... | |
struct | duals::is_complex< T > |
Check if T is std::complex<>, match non- std::complex<>. More... | |
struct | duals::dual_traits< T > |
Dual_traits helper class. More... | |
struct | std::is_compound< duals::dual< T > > |
Duals are compound types. More... | |
struct | std::numeric_limits< duals::dual< T > > |
class | duals::dual< T > |
Macros | |
#define | CPPDUALS_DUAL |
#define | CPPDUALS_HAVE_SIGNGAM 1 |
Configure whether system has POSIX extern int signgam;. | |
Functions | |
template<class T > | |
T | duals::rpart (const dual< T > &x) |
Get the dual's real part. | |
template<class T > | |
T | duals::dpart (const dual< T > &x) |
Get the dual's dual part. | |
template<class T > | |
std::complex< T > | duals::rpart (const std::complex< dual< T >> &x) |
R-part of complex<dual<>> is non-dual complex<> (not to be confused with real()) | |
template<class T > | |
std::complex< T > | duals::dpart (const std::complex< dual< T >> &x) |
Dual part of complex<dual<>> is complex<> | |
template<class T , CPPDUALS_ENABLE_IF((std::is_arithmetic< T >::value && !std::is_compound< T >::value)||is_complex< T >::value) > | |
T | duals::rpart (const T &x) |
Get a non-dual's real part. | |
template<class T , CPPDUALS_ENABLE_IF((std::is_arithmetic< T >::value && !std::is_compound< T >::value)||is_complex< T >::value) > | |
T | duals::dpart (const T &) |
Get a non-dual's dual part := zero. | |
template<class T , typename dist = std::uniform_real_distribution<T>, CPPDUALS_ENABLE_IF(!is_complex< T >::value &&!is_dual< T >::value) > | |
T | duals::randos::random (T a=T(0), T b=T(1)) |
template<class T , typename dist = std::uniform_real_distribution<T>, CPPDUALS_ENABLE_IF(!is_complex< T >::value &&!is_dual< T >::value) > | |
T | duals::randos::random2 (T a=T(0), T b=T(1)) |
template<class DT , CPPDUALS_ENABLE_IF(is_dual< DT >::value) > | |
DT | duals::randos::random2 (DT a=DT(0, 0), DT b=DT(1, 1)) |
template<class CT , CPPDUALS_ENABLE_IF(is_complex< CT >::value) > | |
CT | duals::randos::random2 (CT a=CT(0, 0), CT b=CT(1, 1)) |
template<class DT , typename dist = std::uniform_real_distribution<typename DT::value_type>, CPPDUALS_ENABLE_IF(is_dual< DT >::value) > | |
DT | duals::random (DT a=DT(0, 0), DT b=DT(1, 0)) |
Random real and dual parts, used by Eigen's Random(), by default. | |
template<class T > | |
dual< T > | duals::conj (const dual< T > &x) |
Complex Conjugate of a dual is just the dual. | |
template<class T , CPPDUALS_ENABLE_IF(!is_dual< T >::value && !is_complex< T >::value && std::is_arithmetic< T >::value) > | |
T | duals::conj (const T &x) |
template<class T > | |
dual< T > | duals::dconj (const dual< T > &x) |
template<class T > | |
std::complex< T > | duals::dconj (const std::complex< T > &x) |
template<class T , CPPDUALS_ENABLE_IF(!is_dual< T >::value && !is_complex< T >::value && std::is_arithmetic< T >::value) > | |
T | duals::dconj (const T &x) |
Conjugate a thing that's not dual and not complex. | |
template<class T > | |
dual< T > | duals::exp (const dual< T > &x) |
Exponential e^x. | |
template<class T > | |
dual< T > | duals::log (const dual< T > &x) |
Natural log ln(x) | |
template<class T > | |
dual< T > | duals::log10 (const dual< T > &x) |
template<class T > | |
dual< T > | duals::log2 (const dual< T > &x) |
template<class T , class U , CPPDUALS_ENABLE_LEQ_DEPTH_AND_COMMON_T(T, U) > | |
common_t | duals::pow (const dual< T > &x, const U &y) |
template<class T , class U , CPPDUALS_ENABLE_LEQ_DEPTH_AND_COMMON_T(T, U) > | |
common_t | duals::pow (const U &x, const dual< T > &y) |
template<class T , class U , CPPDUALS_ENABLE_SAME_DEPTH_AND_COMMON_T(T, U) > | |
common_t | duals::pow (const dual< T > &f, const dual< U > &g) |
template<typename T > | |
int | duals::utils::sgn (T val) |
template<class T > | |
dual< T > | duals::abs (const dual< T > &x) |
template<class T > | |
dual< T > | duals::fabs (const dual< T > &x) |
template<class T > | |
duals::dual< T > | duals::copysign (const duals::dual< T > &x, const duals::dual< T > &y) |
template<class T > | |
duals::dual< T > | duals::hypot (const duals::dual< T > &x, const duals::dual< T > &y) |
template<class T > | |
duals::dual< T > | duals::scalbn (const duals::dual< T > &arg, int ex) |
template<class T > | |
duals::dual< T > | duals::logb (const duals::dual< T > &x) |
template<class T > | |
int() | duals::fpclassify (const duals::dual< T > &d) |
template<class T > | |
bool() | duals::isfinite (const duals::dual< T > &d) |
template<class T > | |
bool() | duals::isnormal (const duals::dual< T > &d) |
template<class T > | |
bool() | duals::isinf (const duals::dual< T > &d) |
template<class T > | |
bool() | duals::isnan (const duals::dual< T > &d) |
template<class T > | |
bool() | duals::signbit (const duals::dual< T > &d) |
template<class T > | |
dual< T > | duals::sqrt (const dual< T > &x) |
template<class T > | |
dual< T > | duals::cbrt (const dual< T > &x) |
template<class T > | |
dual< T > | duals::sin (const dual< T > &x) |
template<class T > | |
dual< T > | duals::cos (const dual< T > &x) |
template<class T > | |
dual< T > | duals::tan (const dual< T > &x) |
template<class T > | |
dual< T > | duals::asin (const dual< T > &x) |
template<class T > | |
dual< T > | duals::acos (const dual< T > &x) |
template<class T > | |
dual< T > | duals::atan (const dual< T > &x) |
template<class T > | |
dual< T > | duals::atan2 (const dual< T > &y, const dual< T > &x) |
template<class T , class U , CPPDUALS_ENABLE_LEQ_DEPTH_AND_COMMON_T(T, U) > | |
common_t | duals::atan2 (const dual< T > &y, const U &x) |
template<class T , class U , CPPDUALS_ENABLE_LEQ_DEPTH_AND_COMMON_T(T, U) > | |
common_t | duals::atan2 (const U &y, const dual< T > &x) |
template<class T > | |
dual< T > | duals::sinh (const dual< T > &x) |
template<class T > | |
dual< T > | duals::cosh (const dual< T > &x) |
template<class T > | |
dual< T > | duals::tanh (const dual< T > &x) |
template<class T > | |
dual< T > | duals::asinh (const dual< T > &x) |
template<class T > | |
dual< T > | duals::acosh (const dual< T > &x) |
template<class T > | |
dual< T > | duals::atanh (const dual< T > &x) |
template<class T > | |
dual< T > | duals::log1p (const dual< T > &x) |
template<class T > | |
dual< T > | duals::expm1 (const dual< T > &x) |
template<class T > | |
dual< T > | duals::erf (const dual< T > &x) |
template<class T > | |
dual< T > | duals::erfc (const dual< T > &x) |
Error function complement (1 - erf()). | |
template<class T > | |
dual< T > | duals::tgamma (const dual< T > &x) |
Gamma function. Approximation of the dual part. | |
template<class T > | |
dual< T > | duals::lgamma (const dual< T > &x) |
Log of absolute value of gamma function. Approximation of the dual part. | |
template<class T , class _CharT , class _Traits > | |
std::basic_ostream< _CharT, _Traits > & | duals::operator<< (std::basic_ostream< _CharT, _Traits > &os, const dual< T > &x) |
Putto operator. | |
template<class T , class CharT , class Traits > | |
std::basic_istream< CharT, Traits > & | duals::operator>> (std::basic_istream< CharT, Traits > &is, dual< T > &x) |
Stream reader. | |
Dual number class.
Definition in file dual.
T duals::conj | ( | const T & | x | ) |
Conjugate a thing that's not dual and not complex – it has no complex value so just return it. This is different from std::conj() which promotes the T to a std::complex<T>.
dual<T> duals::dconj | ( | const dual< T > & | x | ) |
std::complex<T> duals::dconj | ( | const std::complex< T > & | x | ) |