1#ifndef XRPL_BASICS_NUMBER_H_INCLUDED
2#define XRPL_BASICS_NUMBER_H_INCLUDED
20 while (value >= 10 && value % 10 == 0)
36 static_assert(
maxMantissa == 9'999'999'999'999'999LL);
47 explicit constexpr Number() =
default;
59 operator+() const noexcept;
61 operator-() const noexcept;
72 operator+=(
Number const& x);
74 operator-=(
Number const& x);
77 operator*=(
Number const& x);
79 operator/=(
Number const& x);
99 return x.mantissa_ == y.mantissa_ && x.exponent_ == y.exponent_;
102 friend constexpr bool
108 friend constexpr bool
113 bool const lneg = x.mantissa_ < 0;
114 bool const rneg = y.mantissa_ < 0;
121 if (x.mantissa_ == 0)
122 return y.mantissa_ > 0;
125 if (y.mantissa_ == 0)
129 if (x.exponent_ > y.exponent_)
131 if (x.exponent_ < y.exponent_)
135 return x.mantissa_ < y.mantissa_;
148 friend constexpr
bool
154 friend constexpr bool
160 friend constexpr bool
302inline constexpr Number
340power(Number
const& f,
unsigned n);
347root(Number f,
unsigned d);
355power(Number
const& f,
unsigned n,
unsigned d);
359inline constexpr Number
NumberRoundModeGuard & operator=(NumberRoundModeGuard const &)=delete
NumberRoundModeGuard(NumberRoundModeGuard const &)=delete
NumberRoundModeGuard(Number::rounding_mode mode) noexcept
saveNumberRoundMode saved_
friend constexpr bool operator<(Number const &x, Number const &y) noexcept
static rounding_mode getround()
constexpr rep mantissa() const noexcept
static rounding_mode setround(rounding_mode mode)
static constexpr Number lowest() noexcept
constexpr bool isnormal() const noexcept
Number truncate() const noexcept
constexpr Number operator-() const noexcept
static thread_local rounding_mode mode_
static constexpr Number max() noexcept
static constexpr int minExponent
constexpr Number operator+() const noexcept
friend constexpr bool operator!=(Number const &x, Number const &y) noexcept
static constexpr std::int64_t maxMantissa
friend constexpr bool operator>=(Number const &x, Number const &y) noexcept
constexpr int exponent() const noexcept
static constexpr int maxExponent
friend std::ostream & operator<<(std::ostream &os, Number const &x)
constexpr int signum() const noexcept
Return the sign of the amount.
static constexpr Number min() noexcept
Number & operator-=(Number const &x)
static constexpr std::int64_t minMantissa
constexpr Number()=default
friend constexpr bool operator<=(Number const &x, Number const &y) noexcept
Number::rounding_mode mode_
saveNumberRoundMode(Number::rounding_mode mode) noexcept
saveNumberRoundMode(saveNumberRoundMode const &)=delete
saveNumberRoundMode & operator=(saveNumberRoundMode const &)=delete
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
constexpr base_uint< Bits, Tag > operator+(base_uint< Bits, Tag > const &a, base_uint< Bits, Tag > const &b)
Number operator-(Number const &x, Number const &y)
std::string to_string(base_uint< Bits, Tag > const &a)
static constexpr Number numZero
Number operator/(Number const &x, Number const &y)
Number root(Number f, unsigned d)
Number power(Number const &f, unsigned n)
Number operator*(Number const &x, Number const &y)
constexpr bool isPowerOfTen(T value)
constexpr Number abs(Number x) noexcept
constexpr Number squelch(Number const &x, Number const &limit) noexcept