Loading src/TNL/Experimental/Arithmetics/MultiPrecision.cpp +18 −34 Original line number Diff line number Diff line Loading @@ -9,29 +9,25 @@ #include "MultiPrecision.h" /* INIT OF NUMBER */ /* CONSTRUCTORS */ MultiPrecision::MultiPrecision(mpf_t number){ MultiPrecision::MultiPrecision(){ mpf_init(number); } MultiPrecision::MultiPrecision(mpf_t number, mp_bitcnt_t precision){ mpf_init2(number, precision); } MultiPrecision::MultiPrecision(mp_bitcnt_t precision){ MultiPrecision::MultiPrecision(int precision) { mpf_set_default_prec(precision); } MultiPrecision::MultiPrecision(mpf_t number, mpf_t n){ mpf_init(n); mpf_init_set(number, n); MultiPrecision::MultiPrecision(double d){ mpf_init_set_d(number, d); } /* OPERATORS IMPLEMENTATION */ void MultiPrecision::operator=(const MultiPrecision& mp){ MultiPrecision& MultiPrecision::operator=(const MultiPrecision& mp){ mpf_set(number, mp.number); return *this; } MultiPrecision& MultiPrecision::operator-(){ Loading Loading @@ -66,25 +62,25 @@ MultiPrecision MultiPrecision::operator+(const MultiPrecision& mp) const{ } MultiPrecision MultiPrecision::operator-(const MultiPrecision& mp) const{ MultiPrecision result = MultiPrecision(*this); MultiPrecision result (*this); result -= mp; return result; } MultiPrecision MultiPrecision::operator*(const MultiPrecision& mp) const{ MultiPrecision result = MultiPrecision(*this); MultiPrecision result (*this); result *= mp; return result; } MultiPrecision MultiPrecision::operator/(const MultiPrecision& mp) const{ MultiPrecision result = MultiPrecision(*this); MultiPrecision result (*this); result /= mp; return result; } bool MultiPrecision::operator==(const MultiPrecision &mp) const{ MultiPrecision m = MultiPrecision(*this); MultiPrecision m (*this); if (mpf_cmp(m.number, mp.number) == 0) return true; else Loading @@ -92,13 +88,11 @@ bool MultiPrecision::operator==(const MultiPrecision &mp) const{ } bool MultiPrecision::operator!=(const MultiPrecision &mp) const{ //MultiPrecision m = MultiPrecision(*this); //return !(m.number == mp.number); return !(*this == mp); } bool MultiPrecision::operator<(const MultiPrecision &mp) const{ MultiPrecision m = MultiPrecision(*this); MultiPrecision m (*this); if (mpf_cmp(m.number, mp.number) < 0) return true; else Loading @@ -106,7 +100,7 @@ bool MultiPrecision::operator<(const MultiPrecision &mp) const{ } bool MultiPrecision::operator>(const MultiPrecision &mp) const{ MultiPrecision m = MultiPrecision(*this); MultiPrecision m (*this); if (mpf_cmp(m.number, mp.number) > 0) return true; else Loading @@ -114,7 +108,7 @@ bool MultiPrecision::operator>(const MultiPrecision &mp) const{ } bool MultiPrecision::operator>=(const MultiPrecision &mp) const{ MultiPrecision m = MultiPrecision(*this); MultiPrecision m (*this); if (mpf_cmp(m.number, mp.number) >= 0) return true; else Loading @@ -122,7 +116,7 @@ bool MultiPrecision::operator>=(const MultiPrecision &mp) const{ } bool MultiPrecision::operator<=(const MultiPrecision &mp) const{ MultiPrecision m = MultiPrecision(*this); MultiPrecision m (*this); if (mpf_cmp(m.number, mp.number) <= 0) return true; else Loading @@ -130,25 +124,15 @@ bool MultiPrecision::operator<=(const MultiPrecision &mp) const{ } /* METHODS */ void MultiPrecision::printMP(int precision){ mpf_out_str(stdout, 10, precision, this->number); } MultiPrecision MultiPrecision::abs(MultiPrecision r, const MultiPrecision a){ mpf_abs(r.number, a.number); return r; void MultiPrecision::printMP(){ int precision = mpf_get_default_prec(); mpf_out_str(stdout, 10, precision, this->number); std::cout <<std::endl; } MultiPrecision MultiPrecision::sqrt(MultiPrecision r, const MultiPrecision a){ mpf_sqrt(r.number, a.number); return r; } /* DESTRUCTOR */ MultiPrecision::~MultiPrecision(){ mpf_clear(number); } #endif No newline at end of file src/TNL/Experimental/Arithmetics/MultiPrecision.h +15 −18 Original line number Diff line number Diff line Loading @@ -19,14 +19,14 @@ public: /* NUMBER */ mpf_t number; /* INITIALIZATION OF NUMBER */ MultiPrecision(mpf_t number); // inits number to 0 MultiPrecision(mpf_t number, mp_bitcnt_t precision); // inits number to 0 with bit precision MultiPrecision(mp_bitcnt_t precision); // sets the default precision MultiPrecision(mpf_t number, mpf_t n); // assigns n value to number /* CONSTRUCTORS */ MultiPrecision(); // initialize number to 0 explicit MultiPrecision(int precision); // sets the default precision explicit MultiPrecision(double d); // initialize number /// TODO Constructor for Quad /* OPERATORS */ void operator=(const MultiPrecision& mp); MultiPrecision& operator=(const MultiPrecision& mp); MultiPrecision& operator-(); MultiPrecision& operator+=(const MultiPrecision& mp); MultiPrecision& operator-=(const MultiPrecision& mp); Loading @@ -37,24 +37,21 @@ public: MultiPrecision operator*(const MultiPrecision& mp) const; MultiPrecision operator/(const MultiPrecision& mp) const; bool operator==(const MultiPrecision &mp) const; /// TODO Operator for comparing Quad and MultiPrecision bool operator!=(const MultiPrecision &mp) const; bool operator<(const MultiPrecision &mp) const; bool operator>(const MultiPrecision &mp) const; bool operator>=(const MultiPrecision &mp) const; bool operator<=(const MultiPrecision &mp) const; MultiPrecision& operator++(); // prefix MultiPrecision& operator--(); // prefix MultiPrecision operator++(int); // postfix MultiPrecision operator--(int); // postfix MultiPrecision& operator++(); MultiPrecision& operator--(); MultiPrecision operator++(int); MultiPrecision operator--(int); /* METHODS */ void printMP(int precision); MultiPrecision abs(MultiPrecision r, const MultiPrecision a); MultiPrecision sqrt(MultiPrecision r, const MultiPrecision a); /// void printNumber(int digits, ostream& str = std::cout ); TODO void printMP(); /// TODO void printNumber(int digits, ostream& str = std::cout ); /* DESTRUCTOR */ ~MultiPrecision(); }; No newline at end of file /// ostream& operator << ( ostream& str, const MultiPrecision& p ); TODO Loading
src/TNL/Experimental/Arithmetics/MultiPrecision.cpp +18 −34 Original line number Diff line number Diff line Loading @@ -9,29 +9,25 @@ #include "MultiPrecision.h" /* INIT OF NUMBER */ /* CONSTRUCTORS */ MultiPrecision::MultiPrecision(mpf_t number){ MultiPrecision::MultiPrecision(){ mpf_init(number); } MultiPrecision::MultiPrecision(mpf_t number, mp_bitcnt_t precision){ mpf_init2(number, precision); } MultiPrecision::MultiPrecision(mp_bitcnt_t precision){ MultiPrecision::MultiPrecision(int precision) { mpf_set_default_prec(precision); } MultiPrecision::MultiPrecision(mpf_t number, mpf_t n){ mpf_init(n); mpf_init_set(number, n); MultiPrecision::MultiPrecision(double d){ mpf_init_set_d(number, d); } /* OPERATORS IMPLEMENTATION */ void MultiPrecision::operator=(const MultiPrecision& mp){ MultiPrecision& MultiPrecision::operator=(const MultiPrecision& mp){ mpf_set(number, mp.number); return *this; } MultiPrecision& MultiPrecision::operator-(){ Loading Loading @@ -66,25 +62,25 @@ MultiPrecision MultiPrecision::operator+(const MultiPrecision& mp) const{ } MultiPrecision MultiPrecision::operator-(const MultiPrecision& mp) const{ MultiPrecision result = MultiPrecision(*this); MultiPrecision result (*this); result -= mp; return result; } MultiPrecision MultiPrecision::operator*(const MultiPrecision& mp) const{ MultiPrecision result = MultiPrecision(*this); MultiPrecision result (*this); result *= mp; return result; } MultiPrecision MultiPrecision::operator/(const MultiPrecision& mp) const{ MultiPrecision result = MultiPrecision(*this); MultiPrecision result (*this); result /= mp; return result; } bool MultiPrecision::operator==(const MultiPrecision &mp) const{ MultiPrecision m = MultiPrecision(*this); MultiPrecision m (*this); if (mpf_cmp(m.number, mp.number) == 0) return true; else Loading @@ -92,13 +88,11 @@ bool MultiPrecision::operator==(const MultiPrecision &mp) const{ } bool MultiPrecision::operator!=(const MultiPrecision &mp) const{ //MultiPrecision m = MultiPrecision(*this); //return !(m.number == mp.number); return !(*this == mp); } bool MultiPrecision::operator<(const MultiPrecision &mp) const{ MultiPrecision m = MultiPrecision(*this); MultiPrecision m (*this); if (mpf_cmp(m.number, mp.number) < 0) return true; else Loading @@ -106,7 +100,7 @@ bool MultiPrecision::operator<(const MultiPrecision &mp) const{ } bool MultiPrecision::operator>(const MultiPrecision &mp) const{ MultiPrecision m = MultiPrecision(*this); MultiPrecision m (*this); if (mpf_cmp(m.number, mp.number) > 0) return true; else Loading @@ -114,7 +108,7 @@ bool MultiPrecision::operator>(const MultiPrecision &mp) const{ } bool MultiPrecision::operator>=(const MultiPrecision &mp) const{ MultiPrecision m = MultiPrecision(*this); MultiPrecision m (*this); if (mpf_cmp(m.number, mp.number) >= 0) return true; else Loading @@ -122,7 +116,7 @@ bool MultiPrecision::operator>=(const MultiPrecision &mp) const{ } bool MultiPrecision::operator<=(const MultiPrecision &mp) const{ MultiPrecision m = MultiPrecision(*this); MultiPrecision m (*this); if (mpf_cmp(m.number, mp.number) <= 0) return true; else Loading @@ -130,25 +124,15 @@ bool MultiPrecision::operator<=(const MultiPrecision &mp) const{ } /* METHODS */ void MultiPrecision::printMP(int precision){ mpf_out_str(stdout, 10, precision, this->number); } MultiPrecision MultiPrecision::abs(MultiPrecision r, const MultiPrecision a){ mpf_abs(r.number, a.number); return r; void MultiPrecision::printMP(){ int precision = mpf_get_default_prec(); mpf_out_str(stdout, 10, precision, this->number); std::cout <<std::endl; } MultiPrecision MultiPrecision::sqrt(MultiPrecision r, const MultiPrecision a){ mpf_sqrt(r.number, a.number); return r; } /* DESTRUCTOR */ MultiPrecision::~MultiPrecision(){ mpf_clear(number); } #endif No newline at end of file
src/TNL/Experimental/Arithmetics/MultiPrecision.h +15 −18 Original line number Diff line number Diff line Loading @@ -19,14 +19,14 @@ public: /* NUMBER */ mpf_t number; /* INITIALIZATION OF NUMBER */ MultiPrecision(mpf_t number); // inits number to 0 MultiPrecision(mpf_t number, mp_bitcnt_t precision); // inits number to 0 with bit precision MultiPrecision(mp_bitcnt_t precision); // sets the default precision MultiPrecision(mpf_t number, mpf_t n); // assigns n value to number /* CONSTRUCTORS */ MultiPrecision(); // initialize number to 0 explicit MultiPrecision(int precision); // sets the default precision explicit MultiPrecision(double d); // initialize number /// TODO Constructor for Quad /* OPERATORS */ void operator=(const MultiPrecision& mp); MultiPrecision& operator=(const MultiPrecision& mp); MultiPrecision& operator-(); MultiPrecision& operator+=(const MultiPrecision& mp); MultiPrecision& operator-=(const MultiPrecision& mp); Loading @@ -37,24 +37,21 @@ public: MultiPrecision operator*(const MultiPrecision& mp) const; MultiPrecision operator/(const MultiPrecision& mp) const; bool operator==(const MultiPrecision &mp) const; /// TODO Operator for comparing Quad and MultiPrecision bool operator!=(const MultiPrecision &mp) const; bool operator<(const MultiPrecision &mp) const; bool operator>(const MultiPrecision &mp) const; bool operator>=(const MultiPrecision &mp) const; bool operator<=(const MultiPrecision &mp) const; MultiPrecision& operator++(); // prefix MultiPrecision& operator--(); // prefix MultiPrecision operator++(int); // postfix MultiPrecision operator--(int); // postfix MultiPrecision& operator++(); MultiPrecision& operator--(); MultiPrecision operator++(int); MultiPrecision operator--(int); /* METHODS */ void printMP(int precision); MultiPrecision abs(MultiPrecision r, const MultiPrecision a); MultiPrecision sqrt(MultiPrecision r, const MultiPrecision a); /// void printNumber(int digits, ostream& str = std::cout ); TODO void printMP(); /// TODO void printNumber(int digits, ostream& str = std::cout ); /* DESTRUCTOR */ ~MultiPrecision(); }; No newline at end of file /// ostream& operator << ( ostream& str, const MultiPrecision& p ); TODO