namespace IPDF
{
-//#define REAL_FLOAT
+#define REAL_SINGLE
//#define REAL_DOUBLE
-#define REAL_HALF
+//#define REAL_HALF
#ifdef REAL_SINGLE
typedef float Real;
struct Real
{
Real() = default;
- Real(float r) : value(r)
+ Real(double r) : value(r)
{
int & a = *((int*)(&value)); // um...
// mask out extra bits in exponent
}
- Real operator+(float f) {return Real(value+f);}
- Real operator-(float f) {return Real(value+f);}
- Real operator/(float f) {return Real(value/f);}
- Real operator*(float f) {return Real(value*f);}
- Real operator+(const Real & r) {return this->operator+(r.value);}
- Real operator-(const Real & r) {return this->operator-(r.value);}
- Real operator*(const Real & r) {return this->operator*(r.value);}
- Real operator/(const Real & r) {return this->operator/(r.value);}
+ Real operator+(float f) const {return Real(value+f);}
+ Real operator-(float f) const {return Real(value+f);}
+ Real operator/(float f) const {return Real(value/f);}
+ Real operator*(float f) const {return Real(value*f);}
+ Real operator+(const Real & r) const {return Real(this->value + r.value);}
+ Real operator-(const Real & r) const {return Real(this->value - r.value);}
+ Real operator*(const Real & r) const {return Real(this->value * r.value);}
+ Real operator/(const Real & r) const {return Real(this->value / r.value);}
+ Real & operator+=(const Real & r) {this->value += r.value; return *this;}
+ Real & operator-=(const Real & r) {this->value -= r.value; return *this;}
+ Real & operator/=(const Real & r) {this->value /= r.value; return *this;}
+ Real & operator*=(const Real & r) {this->value *= r.value; return *this;}
+
float value;
};
inline float Float(Real r) {return r.value;}