lines 9-127 of file: include/cppad/core/base_std_math.hpp {xrst_begin base_std_math} {xrst_spell erfc expm isnan } Base Type Requirements for Standard Math Functions ################################################## Purpose ******* These definitions are required for the user's code to use the type ``AD`` < *Base* > : Unary Standard Math ******************* The type *Base* must support the following functions unary standard math functions (in the CppAD namespace): .. csv-table:: :widths: auto **Syntax**,**Result** *y* = ``abs`` ( *x* ),absolute value *y* = ``acos`` ( *x* ),inverse cosine *y* = ``acosh`` ( *x* ),inverse hyperbolic cosine *y* = ``asin`` ( *x* ),inverse sine *y* = ``asinh`` ( *x* ),inverse hyperbolic sin *y* = ``atan`` ( *x* ),inverse tangent *y* = ``atanh`` ( *x* ),inverse hyperbolic tangent *y* = ``cos`` ( *x* ),cosine *y* = ``cosh`` ( *x* ),hyperbolic cosine *y* = ``erf`` ( *x* ),error function *y* = ``erfc`` ( *x* ),complementary error function *y* = ``exp`` ( *x* ),exponential *y* = ``expm1`` ( *x* ),exponential of x minus one *y* = ``fabs`` ( *x* ),absolute value *y* = ``log`` ( *x* ),natural logarithm *y* = ``log1p`` ( *x* ),logarithm of one plus x *y* = ``sin`` ( *x* ),sine *y* = ``sinh`` ( *x* ),hyperbolic sine *y* = ``sqrt`` ( *x* ),square root *y* = ``tan`` ( *x* ),tangent where the arguments and return value have the prototypes | |tab| ``const`` *Base* & *x* | |tab| *Base* *y* For example, :ref:`base_alloc` , CPPAD_STANDARD_MATH_UNARY ************************* The macro invocation, within the CppAD namespace, ``CPPAD_STANDARD_MATH_UNARY`` ( *Base* , *Fun* ) defines the syntax *y* = ``CppAD::`` *Fun* ( *x* ) This macro uses the functions ``std::`` *Fun* which must be defined and have the same prototype as ``CppAD::`` *Fun* . For example, :ref:`float` . sign **** The type *Base* must support the syntax *y* = ``CppAD::sign`` ( *x* ) which computes .. math:: y = \left\{ \begin{array}{ll} +1 & {\rm if} \; x > 0 \\ 0 & {\rm if} \; x = 0 \\ -1 & {\rm if} \; x < 0 \end{array} \right. where *x* and *y* have the same prototype as above. For example, see :ref:`base_alloc` . Note that, if ordered comparisons are not defined for the type *Base* , the ``code sign`` function should generate an assert if it is used; see :ref:`complex invalid unary math` . pow *** The type *Base* must support the syntax *z* = ``CppAD::pow`` ( *x* , *y* ) which computes :math:`z = x^y`. The arguments *x* and *y* have prototypes | |tab| ``const`` *Base* & *x* | |tab| ``const`` *Base* & *y* and the return value *z* has prototype *Base* *z* For example, see :ref:`base_alloc` . isnan ***** If *Base* defines the ``isnan`` function, you may also have to provide a definition in the CppAD namespace (to avoid a function ambiguity). For example, see :ref:`base_complex` . {xrst_end base_std_math}