Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- mpf_class2.h:
- #pragma once
- extern "C++" {
- #include <gmpxx.h>
- }
- #include<string>
- /*
- Extension class for mpf_class2
- by: Quincy Lam
- mpf_class already implements:
- - operator=
- */
- class mpf_class2 : public mpf_class
- {
- /*
- Wraps mpf_t in operator overloads
- Written by Quincy Lam
- Defining a copy constructor shall break bu_log
- */
- public:
- mpf_class2(double d);
- mpf_class2(signed long sl);
- mpf_class2(signed si);
- mpf_class2(const mpf_class2& c);
- mpf_class2& operator+=(const mpf_class2& rhs);
- mpf_class2& operator+=(unsigned long rhs);
- mpf_class2& operator+=(double rhs);
- const mpf_class2 operator+(const mpf_class2& rhs) const;
- mpf_class2& operator-=(const mpf_class2& rhs);
- mpf_class2& operator-=(unsigned long rhs);
- mpf_class2& operator-=(double rhs);
- const mpf_class2 operator-(const mpf_class2& rhs) const;
- mpf_class2& operator*=(const mpf_class2& rhs);
- mpf_class2& operator*=(unsigned long rhs);
- mpf_class2& operator*=(double rhs);
- const mpf_class2 operator*(const mpf_class2& rhs) const;
- mpf_class2& operator/=(const mpf_class2& rhs);
- mpf_class2& operator/=(unsigned long rhs);
- mpf_class2& operator/=(double rhs);
- const mpf_class2 operator/(const mpf_class2& rhs) const;
- mpf_class2& operator=(const mpf_class2& rhs);
- mpf_class2& operator=(signed long rhs);
- mpf_class2& operator=(unsigned long rhs);
- mpf_class2& operator=(double rhs);
- bool operator==(const mpf_class2& rhs) const;
- bool operator!=(const mpf_class2& rhs) const;
- bool operator<(const mpf_class2& rhs) const;
- bool operator>(const mpf_class2& rhs) const;
- bool operator<=(const mpf_class2& rhs) const;
- bool operator>=(const mpf_class2& rhs) const;
- const mpf_class2 operator-() const;
- operator double() const;
- operator std::string() const;
- /*
- operator signed long() const;
- */
- static const long precision;
- };
- mpf_class2.cpp:
- #include "mpf_class2.h"
- const long mpf_class2::precision = 8*500;
- mpf_class2& mpf_class2::operator+=(const mpf_class2& rhs)
- {
- mpf_add(get_mpf_t(), get_mpf_t(), rhs.get_mpf_t());
- return *this;
- }
- mpf_class2& mpf_class2::operator+=(unsigned long rhs)
- {
- mpf_add_ui(get_mpf_t(), get_mpf_t(), rhs);
- return *this;
- }
- mpf_class2& mpf_class2::operator+=(double rhs)
- {
- operator+=(mpf_class2(rhs));
- return *this;
- }
- const mpf_class2 mpf_class2::operator+(const mpf_class2& rhs) const
- {
- mpf_class2 r(*this);
- r += rhs;
- return r;
- }
- mpf_class2& mpf_class2::operator-=(const mpf_class2& rhs)
- {
- mpf_sub(get_mpf_t(), get_mpf_t(), rhs.get_mpf_t());
- return *this;
- }
- mpf_class2& mpf_class2::operator-=(unsigned long rhs)
- {
- mpf_sub_ui(get_mpf_t(), get_mpf_t(), rhs);
- return *this;
- }
- mpf_class2& mpf_class2::operator-=(double rhs)
- {
- operator-=(mpf_class2(rhs));
- return *this;
- }
- const mpf_class2 mpf_class2::operator-(const mpf_class2& rhs) const
- {
- mpf_class2 r(*this);
- r -= rhs;
- return r;
- }
- mpf_class2& mpf_class2::operator*=(const mpf_class2& rhs)
- {
- mpf_mul(get_mpf_t(), get_mpf_t(), rhs.get_mpf_t());
- return *this;
- }
- mpf_class2& mpf_class2::operator*=(unsigned long rhs)
- {
- mpf_mul_ui(get_mpf_t(), get_mpf_t(), rhs);
- return *this;
- }
- mpf_class2& mpf_class2::operator*=(double rhs)
- {
- operator*=(mpf_class2(rhs));
- return *this;
- }
- const mpf_class2 mpf_class2::operator*(const mpf_class2& rhs) const
- {
- mpf_class2 r(*this);
- r *= rhs;
- return r;
- }
- mpf_class2& mpf_class2::operator/=(const mpf_class2& rhs)
- {
- mpf_div(get_mpf_t(), get_mpf_t(), rhs.get_mpf_t());
- return *this;
- }
- mpf_class2& mpf_class2::operator/=(unsigned long rhs)
- {
- mpf_div_ui(get_mpf_t(), get_mpf_t(), rhs);
- return *this;
- }
- mpf_class2& mpf_class2::operator/=(double rhs)
- {
- operator/=(mpf_class2(rhs));
- return *this;
- }
- const mpf_class2 mpf_class2::operator/(const mpf_class2& rhs) const
- {
- mpf_class2 r(*this);
- r /= rhs;
- return r;
- }
- bool mpf_class2::operator==(const mpf_class2& rhs) const
- {
- return cmp(*this, rhs) == 0;
- }
- bool mpf_class2::operator!=(const mpf_class2& rhs) const
- {
- return !(*this == rhs);
- }
- bool mpf_class2::operator<(const mpf_class2& rhs) const
- {
- return cmp(*this, rhs) < 0;
- }
- bool mpf_class2::operator>(const mpf_class2& rhs) const
- {
- return cmp(*this, rhs) > 0;
- }
- bool mpf_class2::operator<=(const mpf_class2& rhs) const
- {
- return cmp(*this, rhs) <= 0;
- }
- bool mpf_class2::operator>=(const mpf_class2& rhs) const
- {
- return cmp(*this, rhs) >= 0;
- }
- const mpf_class2 mpf_class2::operator-() const
- {
- mpf_class2 r = *this;
- r *= (double)(-1);
- return r;
- }
- mpf_class2::operator double() const
- {
- return get_d();
- }
- mpf_class2::operator std::string() const
- {
- const unsigned short digitCount = 50;
- std::string s;
- mp_exp_t e;
- /*
- Store 50 digits of f in base 10 and store the index of the decimal place
- in e
- */
- s = get_str(e, 10, digitCount);
- /*
- Insert one decimal point at position e
- */
- s.insert(e, 1, '.');
- return s;
- }
- /*
- mpf_class2::operator signed long() const {
- return get_si();
- }
- */
- mpf_class2::mpf_class2(double d) : mpf_class(d)
- {
- printf("double constructor with operand %f\n", d);
- }
- mpf_class2::mpf_class2(signed long sl) : mpf_class(sl)
- {
- printf("sl constructor with operand %i\n", sl);
- }
- mpf_class2::mpf_class2(signed si) : mpf_class(si)
- {
- printf("si constructor with operand %i\n", si);
- }
- mpf_class2::mpf_class2(const mpf_class2& c) : mpf_class(c) {
- printf("copy constructor\n");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement