1#ifndef CPPAD_CG_MATH_INCLUDED
2#define CPPAD_CG_MATH_INCLUDED
20#define CPPAD_CG_CREATE_OPERATION(OpName, OpCode) \
21 template<class Base> \
22 inline cg::CG<Base> OpName(const cg::CG<Base>& var) { \
23 using namespace CppAD::cg; \
24 if (var.isParameter()) { \
25 return CG<Base> (OpName(var.getValue())); \
27 CodeHandler<Base>& h = *var.getOperationNode()->getCodeHandler(); \
28 CG<Base> result(*h.makeNode(CGOpCode::OpCode, var.argument())); \
29 if(var.isValueDefined()) \
30 result.setValue(OpName(var.getValue())); \
35CPPAD_CG_CREATE_OPERATION(abs, Abs)
36CPPAD_CG_CREATE_OPERATION(fabs, Abs)
37CPPAD_CG_CREATE_OPERATION(acos, Acos)
38CPPAD_CG_CREATE_OPERATION(asin, Asin)
39CPPAD_CG_CREATE_OPERATION(atan, Atan)
40CPPAD_CG_CREATE_OPERATION(cos, Cos)
41CPPAD_CG_CREATE_OPERATION(cosh, Cosh)
42CPPAD_CG_CREATE_OPERATION(exp, Exp)
43CPPAD_CG_CREATE_OPERATION(log, Log)
44CPPAD_CG_CREATE_OPERATION(sin, Sin)
45CPPAD_CG_CREATE_OPERATION(sinh, Sinh)
46CPPAD_CG_CREATE_OPERATION(sqrt, Sqrt)
47CPPAD_CG_CREATE_OPERATION(tan, Tan)
48CPPAD_CG_CREATE_OPERATION(tanh, Tanh)
50#if CPPAD_USE_CPLUSPLUS_2011
52CPPAD_CG_CREATE_OPERATION(erf, Erf)
53CPPAD_CG_CREATE_OPERATION(erfc, Erfc)
54CPPAD_CG_CREATE_OPERATION(asinh, Asinh)
55CPPAD_CG_CREATE_OPERATION(acosh, Acosh)
56CPPAD_CG_CREATE_OPERATION(atanh, Atanh)
57CPPAD_CG_CREATE_OPERATION(expm1, Expm1)
58CPPAD_CG_CREATE_OPERATION(log1p, Log1p)
62inline cg::CG<Base> log10(
const cg::CG<Base> &x) {
63 return CppAD::log(x) / CppAD::log(Base(10));
84#if CPPAD_USE_CPLUSPLUS_2011