lines 11-226 of file: include/cppad/core/base_float.hpp {xrst_begin base_float.hpp} {xrst_spell invocations namespaces } Enable use of AD where Base is float ########################################## CondExpOp ********* The type ``float`` 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 float CondExpOp( enum CompareOp cop , const float& left , const float& right , const float& exp_if_true , const float& 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(float) } /* {xrst_code} {xrst_spell_on} uses ``CondExpOp`` above to define ``CondExp`` *Rel* for ``float`` arguments and *Rel* equal to ``Lt`` , ``Le`` , ``Eq`` , ``Ge`` , and ``Gt`` . EqualOpSeq ********** The type ``float`` is simple (in this respect) and so we define {xrst_spell_off} {xrst_code cpp} */ namespace CppAD { inline bool EqualOpSeq(const float& x, const float& y) { return x == y; } } /* {xrst_code} {xrst_spell_on} Identical ********* The type ``float`` is simple (in this respect) and so we define {xrst_spell_off} {xrst_code cpp} */ namespace CppAD { inline bool IdenticalCon(const float& x) { return true; } inline bool IdenticalZero(const float& x) { return (x == 0.f); } inline bool IdenticalOne(const float& x) { return (x == 1.f); } inline bool IdenticalEqualCon(const float& x, const float& y) { return (x == y); } } /* {xrst_code} {xrst_spell_on} Integer ******* {xrst_spell_off} {xrst_code cpp} */ namespace CppAD { inline int Integer(const float& x) { return static_cast(x); } } /* {xrst_code} {xrst_spell_on} azmul ***** {xrst_spell_off} {xrst_code cpp} */ namespace CppAD { CPPAD_AZMUL( float ) } /* {xrst_code} {xrst_spell_on} Ordered ******* The ``float`` type supports ordered comparisons {xrst_spell_off} {xrst_code cpp} */ namespace CppAD { inline bool GreaterThanZero(const float& x) { return x > 0.f; } inline bool GreaterThanOrZero(const float& x) { return x >= 0.f; } inline bool LessThanZero(const float& x) { return x < 0.f; } inline bool LessThanOrZero(const float& x) { return x <= 0.f; } inline bool abs_geq(const float& x, const float& y) { return std::fabs(x) >= std::fabs(y); } } /* {xrst_code} {xrst_spell_on} Unary Standard Math ******************* The following macro invocations import the ``float`` 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:`double` 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 float abs(const float& 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 float sign(const float& x) { if( x > 0.f ) return 1.f; if( x == 0.f ) return 0.f; return -1.f; } } /* {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 ``float`` : {xrst_spell_off} {xrst_code cpp} */ namespace CppAD { CPPAD_NUMERIC_LIMITS(float, float) } /* {xrst_code} {xrst_spell_on} to_string ********* There is no need to define ``to_string`` for ``float`` 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_float.hpp}