00001 #ifndef ARITHM_FUNCTIONS_H 00002 #define ARITHM_FUNCTIONS_H 00003 #include <synaps/init.h> 00004 00005 __BEGIN_NAMESPACE_SYNAPS 00006 00007 00008 namespace arithm 00009 { 00010 using std::abs; 00011 using std::sqrt; 00012 template<class T> 00013 inline T numerator(const T& a) { return a; }; 00014 template<class T> 00015 inline T denumerator( const T& a ) { return T(1); }; 00016 }; 00017 00018 template < typename FT, 00019 typename T > inline 00020 FT to_FT(const T& a, const T& b = 1) { return FT(a, b); } 00021 00023 00027 template < typename T > inline 00028 T gcd(const T& a, const T& b) { return T(1); } 00029 00033 template < typename T > inline 00034 T lcm(const T& a, const T& b) { return ((a * b) / gcd(a, b)); } ; 00038 template < typename T > 00039 int compare(const T& a, const T& b) 00040 { return (b<a)?1:((a<b)?-1:0); }; 00041 00042 template < typename T > 00043 double to_double( const T & a ) 00044 { 00045 double tmp; 00046 let::assign(tmp,a); 00047 return tmp; 00048 }; 00049 00059 template < typename RT, 00060 typename FT > inline 00061 RT numerator(const FT& a) { return a.numerator(); } 00071 template < typename RT, typename FT > inline 00072 RT denominator(const FT& a) 00073 { return a.denominator(); } 00074 00075 00076 template < typename XT, typename T > inline 00077 XT to_XT(const T& a) { return to_double(a); } 00078 00079 00080 __END_NAMESPACE_SYNAPS 00081 00082 #include <synaps/arithm/let.h> 00083 #include <synaps/arithm/sign.h> 00084 00085 #endif