Add tester for numerical calculation of PI
[ipdf/code.git] / src / real.h
index 1d3fb8b..a7f56be 100644 (file)
@@ -7,8 +7,8 @@ namespace IPDF
 {
 
 //#define REAL_FLOAT
-#define REAL_DOUBLE
-//#define REAL_HALF
+//#define REAL_DOUBLE
+#define REAL_HALF
 
 #ifdef REAL_SINGLE
        typedef float Real;
@@ -20,24 +20,29 @@ namespace IPDF
        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
                         //1000 1111 1000 0000 0000 0011 1111 1111
                        // Endianness matters
-                       a &= 0xFF3008F8;//0x8F8003FF;
+                       a &= 0xFFC001F1; //0x8F8003FF;
 
                }       
        
-               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;}

UCC git Repository :: git.ucc.asn.au