13 #ifndef eli_mutil_ad_dual_functions_hpp
14 #define eli_mutil_ad_dual_functions_hpp
16 #include "eli/code_eli.hpp"
31 template <
typename data__,
typename fun_ob__>
45 return fun_ob__::f(val.real());
50 return val.nonreal()*fun_ob__::fp(val.real());
58 #define ELI_AD_DUAL_UNARY_OP_HELPER(x) \
59 template <typename data__, bool comp_real_only> \
60 eli::mutil::ad::dual_number::expression<eli::mutil::ad::dual_number::unary_fun<eli::mutil::ad::dual<data__, comp_real_only>, \
61 eli::mutil::ad::x ## _fun<data__> >, comp_real_only> \
62 x (const eli::mutil::ad::dual<data__, comp_real_only> &v) \
64 typedef eli::mutil::ad::dual_number::unary_fun<eli::mutil::ad::dual<data__, comp_real_only>,eli::mutil::ad::x ## _fun<data__> > un_fun_t; \
66 return eli::mutil::ad::dual_number::expression<un_fun_t, comp_real_only>(un_fun_t(v)); \
68 template <typename data__, bool comp_real_only> \
69 eli::mutil::ad::dual_number::expression<eli::mutil::ad::dual_number::unary_fun<eli::mutil::ad::dual_number::expression<data__, comp_real_only>, \
70 eli::mutil::ad::x ## _fun<typename eli::mutil::ad::dual_number::expression<data__, comp_real_only>::data_type > >, \
72 x (const eli::mutil::ad::dual_number::expression<data__, comp_real_only> &v) \
74 typedef eli::mutil::ad::dual_number::unary_fun<eli::mutil::ad::dual_number::expression<data__, comp_real_only>, \
75 eli::mutil::ad::x ## _fun<typename eli::mutil::ad::dual_number::expression<data__, comp_real_only>::data_type > > un_fun_t; \
77 return eli::mutil::ad::dual_number::expression<un_fun_t, comp_real_only>(un_fun_t(v)); \
Definition: dual_functions.hpp:32
data_type nonreal() const
Definition: dual_functions.hpp:48
data_type real() const
Definition: dual_functions.hpp:43
const data__ & const_expr_ref
Definition: traits.hpp:45
eli::util::traits< data__ >::const_expr_ref val
Definition: dual_functions.hpp:38
data__::data_type data_type
Definition: dual_functions.hpp:35
unary_fun(const data__ &v)
Definition: dual_functions.hpp:41