5 #ifndef __pinocchio_math_fwd_hpp__
6 #define __pinocchio_math_fwd_hpp__
8 #include "pinocchio/fwd.hpp"
10 #include <boost/math/constants/constants.hpp>
11 #include <boost/type_traits/is_floating_point.hpp>
26 template<
typename Scalar>
28 {
return boost::math::constants::pi<Scalar>(); }
36 #define PINOCCHIO_OVERLOAD_MATH_UNARY_OPERATOR(name) \
37 template<typename Scalar> \
38 Scalar name(const Scalar & value) \
39 { using std::name; return name(value); }
41 #define PINOCCHIO_OVERLOAD_MATH_BINARY_OPERATOR(name) \
44 template<typename T1, typename T2> \
45 struct return_type_##name \
49 template<typename T1, typename T2> \
52 static inline typename return_type_##name<T1,T2>::type \
53 run(const T1 & a, const T2 & b) \
54 { using std::name; return name(a,b); } \
57 template<typename T1, typename T2> \
58 inline typename internal::return_type_##name<T1,T2>::type name(const T1 & a, const T2 & b) \
59 { return internal::call_##name<T1,T2>::run(a,b); }
61 PINOCCHIO_OVERLOAD_MATH_UNARY_OPERATOR(fabs)
62 PINOCCHIO_OVERLOAD_MATH_UNARY_OPERATOR(sqrt)
63 PINOCCHIO_OVERLOAD_MATH_UNARY_OPERATOR(atan)
64 PINOCCHIO_OVERLOAD_MATH_UNARY_OPERATOR(acos)
65 PINOCCHIO_OVERLOAD_MATH_UNARY_OPERATOR(asin)
66 PINOCCHIO_OVERLOAD_MATH_UNARY_OPERATOR(cos)
67 PINOCCHIO_OVERLOAD_MATH_UNARY_OPERATOR(sin)
69 PINOCCHIO_OVERLOAD_MATH_BINARY_OPERATOR(pow)
70 PINOCCHIO_OVERLOAD_MATH_BINARY_OPERATOR(min)
71 PINOCCHIO_OVERLOAD_MATH_BINARY_OPERATOR(max)
72 PINOCCHIO_OVERLOAD_MATH_BINARY_OPERATOR(atan2)
76 #endif //#ifndef __pinocchio_math_fwd_hpp__