synaps/arithm/functions.h

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

SYNAPS DOCUMENTATION
logo