20#ifndef RIPPLE_BASICS_NUMBER_H_INCLUDED
21#define RIPPLE_BASICS_NUMBER_H_INCLUDED
55 explicit constexpr Number() =
default;
67 operator+() const noexcept;
69 operator-() const noexcept;
80 operator+=(
Number const& x);
82 operator-=(
Number const& x);
85 operator*=(
Number const& x);
87 operator/=(
Number const& x);
102 operator
rep() const;
104 friend constexpr
bool
107 return x.mantissa_ == y.mantissa_ && x.exponent_ == y.exponent_;
110 friend constexpr bool
116 friend constexpr bool
121 bool const lneg = x.mantissa_ < 0;
122 bool const rneg = y.mantissa_ < 0;
129 if (x.mantissa_ == 0)
130 return y.mantissa_ > 0;
133 if (y.mantissa_ == 0)
137 if (x.exponent_ > y.exponent_)
139 if (x.exponent_ < y.exponent_)
143 return x.mantissa_ < y.mantissa_;
171 friend constexpr bool
177 friend constexpr bool
183 friend constexpr bool
323inline constexpr Number
361power(Number
const& f,
unsigned n);
368root(Number f,
unsigned d);
376power(Number
const& f,
unsigned n,
unsigned d);
380inline 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