56 template <std::
integral T>
60 explicit bi_t(
const std::string&,
int base = 10);
61 explicit bi_t(
const char*,
int base = 10);
68 bi_t& operator=(
bi_t&& other)
noexcept;
69 template <std::
integral T>
71 bi_t& operator=(
const std::string&);
72 bi_t& operator=(
const char*);
73 bi_t& operator=(
double);
76 bi_t operator+()
const;
77 bi_t operator-()
const;
92 std::pair<bi_t, bi_t> div(
const bi_t&)
const;
101 bi_t operator<<(bi_bitcount_t shift)
const;
102 bi_t operator>>(bi_bitcount_t shift)
const;
103 bi_t& operator<<=(bi_bitcount_t shift);
104 bi_t& operator>>=(bi_bitcount_t shift);
107 std::strong_ordering operator<=>(
const bi_t&)
const noexcept;
108 bool operator==(
const bi_t&)
const noexcept;
110 template <std::
integral T>
111 std::strong_ordering operator<=>(T)
const noexcept;
112 template <std::
integral T>
113 bool operator==(T)
const noexcept;
115 bool operator==(
double)
const noexcept;
116 bool operator!=(
double)
const noexcept;
117 bool operator<(
double)
const noexcept;
118 bool operator<=(
double)
const noexcept;
119 bool operator>(
double)
const noexcept;
120 bool operator>=(
double)
const noexcept;
123 bi_t operator~()
const;
132 explicit operator bool()
const noexcept;
133 template <std::
integral T>
134 explicit operator T()
const noexcept;
135 explicit operator double()
const noexcept;
138 bi_bitcount_t bit_length()
const noexcept;
139 bool test_bit(bi_bitcount_t)
const noexcept;
140 bi_t& set_bit(bi_bitcount_t);
144 size_t size() const noexcept;
145 bool negative() const noexcept;
146 std::span<const digit> digits() const;
147 void print_internal(std::ostream& os = std::cout) const noexcept;
151 std::
string to_string(
int base = 10) const;
152 void negate() noexcept;
153 int sign() const noexcept;
154 bool odd() const noexcept;
155 bool even() const noexcept;
156 template <std::integral T>
157 bool within() const noexcept;
160 BI_API friend std::ostream& operator<<(std::ostream& os, const
bi_t& x);
162 friend
bool operator==(
double lhs, const
bi_t& rhs) noexcept;
163 friend
bool operator!=(
double lhs, const
bi_t& rhs) noexcept;
164 friend
bool operator<(
double lhs, const
bi_t& rhs) noexcept;
165 friend
bool operator<=(
double lhs, const
bi_t& rhs) noexcept;
166 friend
bool operator>(
double lhs, const
bi_t& rhs) noexcept;
167 friend
bool operator>=(
double lhs, const
bi_t& rhs) noexcept;
171 static
bi_t pow(const
bi_t& base, bi_bitcount_t exp);
178 void reserve_(
size_t new_capacity);
179 void resize_(
size_t new_size);
180 digit& operator[](
size_t index);
181 const digit& operator[](
size_t index) const;
182 void resize_unsafe_(
size_t new_size);
183 void trim() noexcept;
185 auto begin() noexcept;
186 auto begin() const noexcept;
188 auto end() const noexcept;
189 auto rbegin() noexcept;
190 auto rbegin() const noexcept;
191 auto rend() noexcept;
192 auto rend() const noexcept;