lines 11-226 of file: include/cppad/core/base_double.hpp {xrst_begin base_double.hpp} {xrst_spell invocations namespaces } Enable use of AD where Base is double ########################################### CondExpOp ********* The type ``double`` is a relatively simple type that supports ``<`` , ``<=`` , ``==`` , ``>=`` , and ``>`` operators; see :ref:`base_cond_exp@CondExpTemplate@Ordered Type` . Hence its ``CondExpOp`` function is defined by {xrst_spell_off} {xrst_code cpp} */ namespace CppAD { inline double CondExpOp( enum CompareOp cop , const double& left , const double& right , const double& exp_if_true , const double& exp_if_false ) { return CondExpTemplate(cop, left, right, exp_if_true, exp_if_false); } } /* {xrst_code} {xrst_spell_on} CondExpRel ********** The :ref:`CPPAD_COND_EXP_REL` macro invocation {xrst_spell_off} {xrst_code cpp} */ namespace CppAD { CPPAD_COND_EXP_REL(double) } /* {xrst_code} {xrst_spell_on} uses ``CondExpOp`` above to define ``CondExp`` *Rel* for ``double`` arguments and *Rel* equal to ``Lt`` , ``Le`` , ``Eq`` , ``Ge`` , and ``Gt`` . EqualOpSeq ********** The type ``double`` is simple (in this respect) and so we define {xrst_spell_off} {xrst_code cpp} */ namespace CppAD { inline bool EqualOpSeq(const double& x, const double& y) { return x == y; } } /* {xrst_code} {xrst_spell_on} Identical ********* The type ``double`` is simple (in this respect) and so we define {xrst_spell_off} {xrst_code cpp} */ namespace CppAD { inline bool IdenticalCon(const double& x) { return true; } inline bool IdenticalZero(const double& x) { return (x == 0.); } inline bool IdenticalOne(const double& x) { return (x == 1.); } inline bool IdenticalEqualCon(const double& x, const double& y) { return (x == y); } } /* {xrst_code} {xrst_spell_on} Integer ******* {xrst_spell_off} {xrst_code cpp} */ namespace CppAD { inline int Integer(const double& x) { return static_cast(x); } } /* {xrst_code} {xrst_spell_on} azmul ***** {xrst_spell_off} {xrst_code cpp} */ namespace CppAD { CPPAD_AZMUL( double ) } /* {xrst_code} {xrst_spell_on} Ordered ******* The ``double`` type supports ordered comparisons {xrst_spell_off} {xrst_code cpp} */ namespace CppAD { inline bool GreaterThanZero(const double& x) { return x > 0.; } inline bool GreaterThanOrZero(const double& x) { return x >= 0.; } inline bool LessThanZero(const double& x) { return x < 0.; } inline bool LessThanOrZero(const double& x) { return x <= 0.; } inline bool abs_geq(const double& x, const double& y) { return std::fabs(x) >= std::fabs(y); } } /* {xrst_code} {xrst_spell_on} Unary Standard Math ******************* The following macro invocations import the ``double`` versions of the unary standard math functions into the ``CppAD`` namespace. Importing avoids ambiguity errors when using both the ``CppAD`` and ``std`` namespaces. Note this also defines the :ref:`float` versions of these functions. {xrst_spell_off} {xrst_code cpp} */ namespace CppAD { using std::acos; using std::asin; using std::atan; using std::cos; using std::cosh; using std::exp; using std::fabs; using std::log; using std::log10; using std::sin; using std::sinh; using std::sqrt; using std::tan; using std::tanh; using std::asinh; using std::acosh; using std::atanh; using std::erf; using std::erfc; using std::expm1; using std::log1p; } /* {xrst_code} {xrst_spell_on} The absolute value function is special because its ``std`` name is ``fabs`` {xrst_spell_off} {xrst_code cpp} */ namespace CppAD { inline double abs(const double& x) { return std::fabs(x); } } /* {xrst_code} {xrst_spell_on} sign **** The following defines the ``CppAD::sign`` function that is required to use ``AD`` : {xrst_spell_off} {xrst_code cpp} */ namespace CppAD { inline double sign(const double& x) { if( x > 0. ) return 1.; if( x == 0. ) return 0.; return -1.; } } /* {xrst_code} {xrst_spell_on} pow *** The following defines a ``CppAD::pow`` function that is required to use ``AD`` . As with the unary standard math functions, this has the exact same signature as ``std::pow`` , so use it instead of defining another function. {xrst_spell_off} {xrst_code cpp} */ namespace CppAD { using std::pow; } /* {xrst_code} {xrst_spell_on} numeric_limits ************** The following defines the CppAD :ref:`numeric_limits-name` for the type ``double`` : {xrst_spell_off} {xrst_code cpp} */ namespace CppAD { CPPAD_NUMERIC_LIMITS(double, double) } /* {xrst_code} {xrst_spell_on} to_string ********* There is no need to define ``to_string`` for ``double`` because it is defined by including ``cppad/utility/to_string.hpp`` ; see :ref:`to_string-name` . See :ref:`base_complex.hpp` for an example where it is necessary to define ``to_string`` for a *Base* type. {xrst_end base_double.hpp}