Base Type Requirements for Standard Math Functions
Keywords: base type requirements standard math functions purpose unary cppad_standard_math_unary erf asinh acosh atanh expm1 log1p sign pow isnan

| Prev | Next |  |  |  |  |  | base_std_math |

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 = asin(x)` | inverse sine
`y = atan(x)` | inverse tangent
`y = cos(x)` | cosine
`y = cosh(x)` | hyperbolic cosine
`y = exp(x)` | exponential
`y = fabs(x)` | absolute value
`y = log(x)` | natural logarithm
`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 .
erf, asinh, acosh, atanh, expm1, log1p
If this preprocessor symbol `CPPAD_USE_CPLUSPLUS_2011` is true (`1`), when compiling for c++11, the type `double` is supported for the functions listed below. In this case, the type `Base` must also support these functions:

Syntax | Result
`y = erf(x)` | error function
`y = asinh(x)` | inverse hyperbolic sin
`y = acosh(x)` | inverse hyperbolic cosine
`y = atanh(x)` | inverse hyperbolic tangent
`y = expm1(x)` | exponential of x minus one
`y = log1p(x)` | logarithm of one plus x

where the arguments and return value have the prototypes `
const Base& x
Base y
`
sign
The type `Base` must support the syntax `
y = CppAD::sign(x)
` which computes y = { + 1 if x > 0 0 if x = 0 -1 if x < 0 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 .

Input File: cppad/local/base_std_math.hpp