Commit 2d9d9056 authored by Daniel Simon's avatar Daniel Simon
Browse files

1) MultiPrecision.h modified. Support of number init, arithmetic operations

2) MultiPrecision.cpp - implementation of number inits and arithmetic operators finished
3) TODO: Operators overloading
parent d9e4a2bd
Loading
Loading
Loading
Loading
+97 −1
Original line number Diff line number Diff line
@@ -7,7 +7,103 @@

#include "MultiPrecision.h"

/* INIT OF NUMBER */

// Implementation of MultiPrecision.h
MultiPrecision::MultiPrecision(mpf_t number){
    mpf_init(number);
}

MultiPrecision::MultiPrecision(mpf_t number, mp_bitcnt_t precision){
    mpf_init2(number, precision);
}

MultiPrecision::MultiPrecision(mp_bitcnt_t precision){
    mpf_set_default_prec(precision);
}

MultiPrecision::MultiPrecision(mpf_t number,  mpf_t n){
    mpf_init(n);
    mpf_init_set(number, n);
}

/* ARITHMETIC FUNCTIONS */

MultiPrecision addition( MultiPrecision a, MultiPrecision b ){
    mpf_t result;
    mpf_init(result);
    mpf_add(result, a.number, b.number);
    return result;
}

MultiPrecision subtraction( MultiPrecision a, MultiPrecision b ){
    mpf_t result;
    mpf_init(result);
    mpf_sub(result, a.number, b.number);
    return result;
}

MultiPrecision multiplication( MultiPrecision a, MultiPrecision b ){
    mpf_t result;
    mpf_init(result);
    mpf_mul(result, a.number, b.number);
    return result;
}

MultiPrecision division( MultiPrecision a, MultiPrecision b ){
    mpf_t result;
    mpf_init(result);
    mpf_div(result, a.number, b.number);
    return result;
}

MultiPrecision sqrt( MultiPrecision a ){
    mpf_t result;
    mpf_init(result);
    mpf_sqrt(result, a.number);
    return result;
}

MultiPrecision power( MultiPrecision a, unsigned long int c ){
    mpf_t result;
    mpf_init(result);
    mpf_pow_ui(result, a.number, c);
    return result;
}

MultiPrecision negation( MultiPrecision a ){
    mpf_t result;
    mpf_init(result);
    mpf_neg(result, a.number);
    return result;
}

MultiPrecision abs( MultiPrecision a ){
    mpf_t result;
    mpf_init(result);
    mpf_abs(result, a.number);
    return result;
}

MultiPrecision mul_2exp( MultiPrecision a, mp_bitcnt_t b){
    mpf_t result;
    mpf_init(result);
    mpf_mul_2exp(result, a.number, b);
    return result;
}

MultiPrecision div_2exp( MultiPrecision a, mp_bitcnt_t b ){
    mpf_t result;
    mpf_init(result);
    mpf_div_2exp(result, a.number, b);
    return result;
}


/* OPERATOR OVERLOADING */


/* DESTRUCTOR */

MultiPrecision::~MultiPrecision(){
    mpf_clear(number);
}
 No newline at end of file
+21 −15
Original line number Diff line number Diff line
@@ -14,19 +14,25 @@ class MultiPrecision{
public:
    mpf_t number; // number

    MultiPrecision(mpf_t n); // inits value to 0
    /* 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

    /* ARITHMETIC FUNCTIONS */
    MultiPrecision addition( MultiPrecision r, MultiPrecision a, MultiPrecision b ); // r = a + b
    MultiPrecision subtraction( MultiPrecision r, MultiPrecision a, MultiPrecision b ); // r = a - b
    MultiPrecision multiplication( MultiPrecision r, MultiPrecision a, MultiPrecision b ); // r = a * b
    MultiPrecision division( MultiPrecision r, MultiPrecision a, MultiPrecision b ); // r = a / b
    MultiPrecision sqrt( MultiPrecision r, MultiPrecision a ); // r = sqrt(a)  
    MultiPrecision power( MultiPrecision r, MultiPrecision b, unsigned long int c ); // r = b ** c
    MultiPrecision negation( MultiPrecision r, MultiPrecision b); // r = -b
    MultiPrecision abs( MultiPrecision r, MultiPrecision a ); // r = |a|
    MultiPrecision addition( MultiPrecision a, MultiPrecision b ); // result = a + b
    MultiPrecision subtraction( MultiPrecision a, MultiPrecision b ); // result = a - b
    MultiPrecision multiplication( MultiPrecision a, MultiPrecision b ); // result = a * b
    MultiPrecision division( MultiPrecision a, MultiPrecision b ); // result = a / b
    MultiPrecision sqrt( MultiPrecision a ); // result = sqrt(a)
    MultiPrecision power( MultiPrecision a, unsigned long int c ); // result = b ** c
    MultiPrecision negation( MultiPrecision a ); // result = -b
    MultiPrecision abs( MultiPrecision a ); // result = |a|
    MultiPrecision mul_2exp( MultiPrecision a, mp_bitcnt_t b );
    MultiPrecision div_2exp( MultiPrecision a, mp_bitcnt_t b );

    /* OPERATORS OVERLOADING */

    void freeMultiPrecision(); // free memory
    ~MultiPrecision(); // destructor
};