X-Git-Url: https://git.ucc.asn.au/?p=ipdf%2Fcode.git;a=blobdiff_plain;f=src%2Freal.h;h=72def6988bfc3e99466c58f9870ea75d3e35dd6d;hp=e35d95236c809bc13a09f438938cdf55d5c154f6;hb=326f04a375ce3120f7e8957e3d7cd5f296f513e3;hpb=3917214a11bf76381ddc528e3fe51de9ec038d42 diff --git a/src/real.h b/src/real.h index e35d952..72def69 100644 --- a/src/real.h +++ b/src/real.h @@ -20,6 +20,10 @@ #error "REALTYPE was not defined!" #endif +#define XSTR(x) STR(x) +#define STR(x) #x +#pragma message "REALTYPE = " XSTR(REALTYPE) + #if REALTYPE == REAL_VFPU #include "vfpu.h" #endif @@ -57,12 +61,15 @@ namespace IPDF #if REALTYPE == REAL_SINGLE typedef float Real; inline Real RealFromStr(const char * str) {return strtof(str, NULL);} + inline std::string Str(const Real & a) {std::stringstream s; s << a; return s.str();} #elif REALTYPE == REAL_DOUBLE typedef double Real; inline Real RealFromStr(const char * str) {return strtod(str, NULL);} + inline std::string Str(const Real & a) {std::stringstream s; s << a; return s.str();} #elif REALTYPE == REAL_LONG_DOUBLE typedef long double Real; inline Real RealFromStr(const char * str) {return strtold(str, NULL);} + inline std::string Str(const Real & a) {std::stringstream s; s << a; return s.str();} #elif REALTYPE == REAL_VFPU typedef VFPU::VFloat Real; inline float Float(const Real & r) {return r.m_value;} @@ -113,6 +120,7 @@ namespace IPDF inline Real Sqrt(const Real & r) {return Real(sqrt(r.ToDouble()));} inline Real RealFromStr(const char * str) {return Real(strtod(str, NULL));} inline Real Abs(const Real & a) {return (a > Real(0)) ? a : Real(0)-a;} + inline std::string Str(const Real & a) {return a.Str();} #else #error "Type of Real unspecified." @@ -128,7 +136,16 @@ namespace IPDF inline double Double(long double f) {return (double)(f);} inline double Sqrt(double f) {return sqrt(f);} inline double Abs(double a) {return fabs(a);} - inline int64_t Int64(double a){return (int64_t)a;} + + + inline int64_t Int64(double a) + { + if (a < INT64_MIN) + return INT64_MIN; + if (a > INT64_MAX) + return INT64_MAX; + return (int64_t)(a); + } inline Real Power(const Real & a, int n) { @@ -187,7 +204,6 @@ namespace IPDF #endif #endif } - } #endif //_REAL_H