diff --git a/src/lol/math/real.h b/src/lol/math/real.h index d3aad950..eb7bc0d0 100644 --- a/src/lol/math/real.h +++ b/src/lol/math/real.h @@ -43,8 +43,10 @@ public: Real(float f); Real(double f); - Real(int i); - Real(unsigned int i); + Real(int32_t i); + Real(uint32_t i); + Real(int64_t i); + Real(uint64_t i); Real(char const *str); @@ -212,8 +214,10 @@ template<> real const &real::operator =(real const &x); template<> real::~Real(); template<> real::Real(float f); template<> real::Real(double f); -template<> real::Real(int i); -template<> real::Real(unsigned int i); +template<> real::Real(int32_t i); +template<> real::Real(uint32_t i); +template<> real::Real(int64_t i); +template<> real::Real(uint64_t i); template<> real::Real(char const *str); template<> real::operator float() const; diff --git a/src/math/real.cpp b/src/math/real.cpp index 6670b651..6ecd4f0f 100644 --- a/src/math/real.cpp +++ b/src/math/real.cpp @@ -98,9 +98,13 @@ template<> real::~Real() delete[] m_mantissa; } +/* FIXME: 64-bit integer loading is incorrect,we lose precision. */ +template<> real::Real(int32_t i) { new(this) real((double)i); } +template<> real::Real(uint32_t i) { new(this) real((double)i); } +template<> real::Real(int64_t i) { new(this) real((double)i); } +template<> real::Real(uint64_t i) { new(this) real((double)i); } + template<> real::Real(float f) { new(this) real((double)f); } -template<> real::Real(int i) { new(this) real((double)i); } -template<> real::Real(unsigned int i) { new(this) real((double)i); } template<> real::Real(double d) {