From efe8e1d0512655a4c5c7a4af5b9a9b2838bbf95c Mon Sep 17 00:00:00 2001 From: Sam Hocevar Date: Mon, 8 Dec 2014 08:05:30 +0000 Subject: [PATCH] math: allow to build real numbers from 64-bit integers. --- src/lol/math/real.h | 12 ++++++++---- src/math/real.cpp | 8 ++++++-- 2 files changed, 14 insertions(+), 6 deletions(-) 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) {