git.ucc.asn.au
/
ipdf
/
code.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
| inline |
side by side
Add tester for numerical calculation of PI
[ipdf/code.git]
/
src
/
real.h
diff --git
a/src/real.h
b/src/real.h
index
1d3fb8b
..
a7f56be
100644
(file)
--- a/
src/real.h
+++ b/
src/real.h
@@
-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 &= 0xFF
3008F8;
//0x8F8003FF;
+ a &= 0xFF
C001F1;
//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