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 digit_t digit = (m_digits.size() == 1) ? m_digits[0] : 0xFFFFFFFFFFFFFFFF;
29 return (m_sign) ? -digit : digit;
32 inline bool Sign() const {return m_sign;}
33 inline char SignChar() const {return (m_sign) ? '-' : '+';}
34 std::string DigitStr() const;
36 std::string Str(const std::string & base="0123456789") const;
37 inline std::string Str(const char * base) const
39 return Str(std::string(base));
42 Arbint & operator=(const Arbint & equ);
43 Arbint & operator+=(const Arbint & add);
44 Arbint & operator-=(const Arbint & sub);
45 Arbint & operator*=(const Arbint & mul);
46 void Division(const Arbint & div, Arbint & result, Arbint & modulo) const;
48 inline Arbint operator+(const Arbint & add) const
54 inline Arbint operator-(const Arbint & add) const
61 inline Arbint operator*(const Arbint & mul) const
68 inline Arbint & operator/=(const Arbint & div)
72 this->Division(div, result, remainder);
73 this->operator=(result);
76 inline Arbint operator/(const Arbint & div)
82 inline Arbint operator%(const Arbint & div)
86 this->Division(div, result, remainder);
90 bool operator==(const Arbint & equ) const;
91 bool operator<(const Arbint & less) const;
93 inline bool operator!=(const Arbint & equ) const
95 return !(this->operator==(equ));
97 inline bool operator<=(const Arbint & leq) const
99 return (this->operator==(leq) || this->operator<(leq));
102 inline bool operator>=(const Arbint & leq) const
104 return (this->operator==(leq) || this->operator<(leq));
106 inline bool operator>(const Arbint & grea) const
108 return !(this->operator<=(grea));
113 //inline operator double() const {return double(AsDigit());}
114 inline operator digit_t() const {return AsDigit();}
115 //inline operator int() const {return int(AsDigit());}
120 Arbint & AddBasic(const Arbint & add);
121 Arbint & SubBasic(const Arbint & sub);
123 std::vector<digit_t> m_digits;
131 typedef int64_t digit_t;
132 digit_t add_digits(digit_t * dst, digit_t * add, digit_t size);
133 digit_t sub_digits(digit_t * dst, digit_t * add, digit_t size);
134 digit_t mul_digits(digit_t * dst, digit_t mul, digit_t size);