cppduals  0.5.4
Dual numbers for C++
Classes | Macros | Typedefs | Functions
dual File Reference

Dual number class. More...

This graph shows which files directly or indirectly include this file:

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;.
 

Typedefs

typedef dual< float > duals::dualf
 
typedef dual< double > duals::duald
 
typedef dual< long double > duals::dualld
 
typedef dual< dualf > duals::hyperdualf
 
typedef dual< duald > duals::hyperduald
 
typedef dual< dualld > duals::hyperdualld
 
typedef std::complex< dualf > duals::cdualf
 
typedef std::complex< duald > duals::cduald
 
typedef std::complex< dualld > duals::cdualld
 

Functions

template<class T >
duals::rpart (const dual< T > &x)
 Get the dual's real part.
 
template<class 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) >
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) >
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) >
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) >
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) >
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) >
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.
 

Detailed Description

Dual number class.

Definition in file dual.

Function Documentation

◆ conj()

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)

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

Definition at line 827 of file dual.

◆ dconj() [1/2]

template<class T >
dual<T> duals::dconj ( const dual< T > &  x)

Dual Conjugate, such that x*dconj(x) = rpart(x)^2. Different function name from complex conjugate conj().

Definition at line 831 of file dual.

◆ dconj() [2/2]

template<class T >
std::complex<T> duals::dconj ( const std::complex< T > &  x)

Dual Conjugate of a complex, such that x*dconj(x) = rpart(x)^2. Different function name from complex conjugate conj().

Definition at line 837 of file dual.

◆ erf()

template<class T >
dual<T> duals::erf ( const dual< T > &  x)

The error function. Make sure to #include <math.h> before #include <duals/dual> to use this function.

Definition at line 1110 of file dual.