#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
#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;}
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."
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)
{
inline Real RealFromStr(const std::string & str) {return RealFromStr(str.c_str());}
- inline void DebugRealInfo() {Debug("Compiled with REAL = %d => \"%s\" sizeof(Real) == %d bytes", REALTYPE, g_real_name[REALTYPE], sizeof(Real));}
-
+ inline void DebugRealInfo()
+ {
+ Debug("Compiled with REAL = %d => \"%s\" sizeof(Real) == %d bytes", REALTYPE, g_real_name[REALTYPE], sizeof(Real));
+ #if REALTYPE == REAL_PARANOIDNUMBER
+ #ifdef PARANOID_SIZE_LIMIT
+ Debug("Size limit of %d is being enforced", PARANOID_SIZE_LIMIT);
+ #endif
+ #endif
+ }
}
#endif //_REAL_H