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())); \
35 CPPAD_CG_CREATE_OPERATION(abs, Abs)
36 CPPAD_CG_CREATE_OPERATION(fabs, Abs)
37 CPPAD_CG_CREATE_OPERATION(acos, Acos)
38 CPPAD_CG_CREATE_OPERATION(asin, Asin)
39 CPPAD_CG_CREATE_OPERATION(atan, Atan)
40 CPPAD_CG_CREATE_OPERATION(cos, Cos)
41 CPPAD_CG_CREATE_OPERATION(cosh, Cosh)
42 CPPAD_CG_CREATE_OPERATION(exp, Exp)
43 CPPAD_CG_CREATE_OPERATION(log, Log)
44 CPPAD_CG_CREATE_OPERATION(sin, Sin)
45 CPPAD_CG_CREATE_OPERATION(sinh, Sinh)
46 CPPAD_CG_CREATE_OPERATION(sqrt, Sqrt)
47 CPPAD_CG_CREATE_OPERATION(tan, Tan)
48 CPPAD_CG_CREATE_OPERATION(tanh, Tanh)
50 #if CPPAD_USE_CPLUSPLUS_2011
52 CPPAD_CG_CREATE_OPERATION(erf, Erf)
53 CPPAD_CG_CREATE_OPERATION(erfc, Erfc)
54 CPPAD_CG_CREATE_OPERATION(asinh, Asinh)
55 CPPAD_CG_CREATE_OPERATION(acosh, Acosh)
56 CPPAD_CG_CREATE_OPERATION(atanh, Atanh)
57 CPPAD_CG_CREATE_OPERATION(expm1, Expm1)
58 CPPAD_CG_CREATE_OPERATION(log1p, Log1p)
62 inline cg::CG<Base> log10(
const cg::CG<Base> &x) {
63 return CppAD::log(x) / CppAD::log(Base(10));
84 #if CPPAD_USE_CPLUSPLUS_2011