1#ifndef XRPL_BASICS_NUMBER_H_INCLUDED
2#define XRPL_BASICS_NUMBER_H_INCLUDED
36 explicit constexpr Number() =
default;
48 operator+() const noexcept;
50 operator-() const noexcept;
61 operator+=(
Number const& x);
63 operator-=(
Number const& x);
66 operator*=(
Number const& x);
68 operator/=(
Number const& x);
88 return x.mantissa_ == y.mantissa_ && x.exponent_ == y.exponent_;
102 bool const lneg = x.mantissa_ < 0;
103 bool const rneg = y.mantissa_ < 0;
110 if (x.mantissa_ == 0)
111 return y.mantissa_ > 0;
114 if (y.mantissa_ == 0)
118 if (x.exponent_ > y.exponent_)
120 if (x.exponent_ < y.exponent_)
124 return x.mantissa_ < y.mantissa_;
152 friend constexpr bool
158 friend constexpr bool
164 friend constexpr bool
304inline constexpr Number
342power(Number
const& f,
unsigned n);
349root(Number f,
unsigned d);
357power(Number
const& f,
unsigned n,
unsigned d);
361inline constexpr Number
NumberRoundModeGuard(NumberRoundModeGuard const &)=delete
NumberRoundModeGuard & operator=(NumberRoundModeGuard const &)=delete
saveNumberRoundMode saved_
NumberRoundModeGuard(Number::rounding_mode mode) noexcept
constexpr bool isnormal() const noexcept
friend constexpr bool operator<(Number const &x, Number const &y) noexcept
static constexpr std::int64_t maxMantissa
static constexpr int maxExponent
Number truncate() const noexcept
static constexpr std::int64_t minMantissa
constexpr int exponent() const noexcept
static thread_local rounding_mode mode_
constexpr Number operator+() const noexcept
static constexpr Number max() noexcept
static rounding_mode getround()
static constexpr int minExponent
friend constexpr bool operator!=(Number const &x, Number const &y) noexcept
friend constexpr bool operator>=(Number const &x, Number const &y) noexcept
static rounding_mode setround(rounding_mode mode)
constexpr rep mantissa() const noexcept
static constexpr Number lowest() noexcept
static constexpr Number min() noexcept
Number & operator-=(Number const &x)
constexpr Number operator-() const noexcept
friend std::ostream & operator<<(std::ostream &os, Number const &x)
friend constexpr bool operator>(Number const &x, Number const &y) noexcept
constexpr Number()=default
constexpr int signum() const noexcept
Return the sign of the amount.
friend constexpr bool operator<=(Number const &x, Number const &y) noexcept
saveNumberRoundMode(Number::rounding_mode mode) noexcept
saveNumberRoundMode & operator=(saveNumberRoundMode const &)=delete
Number::rounding_mode mode_
saveNumberRoundMode(saveNumberRoundMode const &)=delete
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Number operator*(Number const &x, Number const &y)
Number power(Number const &f, unsigned n)
std::string to_string(base_uint< Bits, Tag > const &a)
Number operator-(Number const &x, Number const &y)
Number root(Number f, unsigned d)
constexpr base_uint< Bits, Tag > operator+(base_uint< Bits, Tag > const &a, base_uint< Bits, Tag > const &b)
constexpr Number squelch(Number const &x, Number const &limit) noexcept
Number operator/(Number const &x, Number const &y)
constexpr Number abs(Number x) noexcept