base_std_math

View page source

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):

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

      const Base & x
      Base y

For example, 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, float .

sign

The type Base must support the syntax

y = CppAD::sign ( x )

which computes

\[\begin{split}y = \left\{ \begin{array}{ll} +1 & {\rm if} \; x > 0 \\ 0 & {\rm if} \; x = 0 \\ -1 & {\rm if} \; x < 0 \end{array} \right.\end{split}\]

where x and y have the same prototype as above. For example, see 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 complex invalid unary math .

pow

The type Base must support the syntax

z = CppAD::pow ( x , y )

which computes \(z = x^y\). The arguments x and y have prototypes

      const Base & x
      const Base & y

and the return value z has prototype

Base z

For example, see 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 base_complex .