3 * @brief Arbitrary sized integer declarations
17 typedef int64_t digit_t;
20 Arbint(const std::vector<digit_t> & digits);
21 Arbint(unsigned n, digit_t d0, ...);
22 Arbint(const std::string & str, const std::string & base="0123456789");
24 Arbint(const Arbint & cpy);
26 digit_t AsDigit() const
28 return (m_sign) ? -m_digits[0] : m_digits[0];
31 inline bool Sign() const {return m_sign;}
32 inline char SignChar() const {return (m_sign) ? '-' : '+';}
33 std::string DigitStr() const;
35 std::string Str(const std::string & base="0123456789") const;
36 inline std::string Str(const char * base) const
38 return Str(std::string(base));
41 Arbint & operator=(const Arbint & equ);
42 Arbint & operator+=(const Arbint & add);
43 Arbint & operator-=(const Arbint & sub);
44 Arbint & operator*=(const Arbint & mul);
45 void Division(const Arbint & div, Arbint & result, Arbint & modulo) const;
47 inline Arbint operator+(const Arbint & add) const
53 inline Arbint operator-(const Arbint & add) const
60 inline Arbint operator*(const Arbint & mul) const
67 inline Arbint & operator/=(const Arbint & div)
71 this->Division(div, result, remainder);
72 this->operator=(result);
75 inline Arbint operator/(const Arbint & div)
81 inline Arbint operator%(const Arbint & div)
85 this->Division(div, result, remainder);
89 bool operator==(const Arbint & equ) const;
90 bool operator<(const Arbint & less) const;
92 inline bool operator!=(const Arbint & equ) const
94 return !(this->operator==(equ));
96 inline bool operator<=(const Arbint & leq) const
98 return (this->operator==(leq) || this->operator<(leq));
101 inline bool operator>=(const Arbint & leq) const
103 return (this->operator==(leq) || this->operator<(leq));
105 inline bool operator>(const Arbint & grea) const
107 return !(this->operator<=(grea));
115 Arbint & AddBasic(const Arbint & add);
116 Arbint & SubBasic(const Arbint & sub);
118 std::vector<digit_t> m_digits;
126 typedef int64_t digit_t;
127 digit_t add_digits(digit_t * dst, digit_t * add, digit_t size);
128 digit_t sub_digits(digit_t * dst, digit_t * add, digit_t size);
129 digit_t mul_digits(digit_t * dst, digit_t mul, digit_t size);