Commit 49b6e9fd authored by Daniel Simon's avatar Daniel Simon
Browse files

Segmentation core dumps repaired. Constructors modified.

parent 894963e2
Loading
Loading
Loading
Loading
+18 −34
Original line number Diff line number Diff line
@@ -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-(){
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
+15 −18
Original line number Diff line number Diff line
@@ -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);
@@ -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