abacus: bignum: add log10

This commit is contained in:
Bruno BELANYI 2021-08-23 16:38:25 +02:00
parent c730705a13
commit 31dcb91a26
3 changed files with 40 additions and 0 deletions

View file

@ -492,4 +492,22 @@ BigNum log2(BigNum const& num) {
return res;
}
BigNum log10(BigNum const& num) {
assert(num.is_canonicalized());
assert(BASE == 10);
if (num.is_zero()) {
throw std::invalid_argument("attempt to take the log10 of zero");
} else if (num.is_negative()) {
throw std::invalid_argument(
"attempt to take the log10 of a negative number");
}
auto res = BigNum(num.digits_.size() - 1);
assert(res.is_canonicalized());
return res;
}
} // namespace abacus::bignum

View file

@ -93,6 +93,8 @@ public:
friend BigNum log2(BigNum const& num);
friend BigNum log10(BigNum const& num);
friend bool operator==(BigNum const& lhs, BigNum const& rhs) {
return lhs.equal(rhs);
}