8template<concepts::SignedInteger T>
19 template<concepts::SignedInteger U>
21 constexpr explicit(
sizeof(U) <=
sizeof(T))
operator Rational<U>()
const {
34 auto b_scaled_numerator = other.numerator() * (common_denominator / other.denominator());
36 return Rational { a_scaled_numerator + b_scaled_numerator, common_denominator };
49 constexpr auto round() const -> T {
96 if (
auto result = b.negative() <=> a.negative(); result != 0) {
100 auto difference = a.subtract(b);
101 return difference.numerator() <=> T(0);
104 constexpr void normalize() {
121template<
typename T,
typename U>
#define DI_ASSERT(...)
Definition assert_bool.h:7
constexpr auto operator++() -> Rational &
Definition rational.h:59
constexpr auto numerator() const -> T
Definition rational.h:25
constexpr auto round() const -> T
Definition rational.h:49
constexpr auto operator--() -> Rational &
Definition rational.h:66
constexpr friend auto operator==(Rational, Rational) -> bool=default
constexpr auto multiply(Rational other) const -> Rational
Definition rational.h:39
constexpr auto subtract(Rational other) const -> Rational
Definition rational.h:43
constexpr friend auto operator<=>(Rational a, Rational b) -> strong_ordering
Definition rational.h:95
constexpr auto operator-() const -> Rational
Definition rational.h:85
constexpr auto operator--(int) -> Rational
Definition rational.h:67
constexpr auto operator-(Rational a) const -> Rational
Definition rational.h:77
constexpr auto operator++(int) -> Rational
Definition rational.h:60
constexpr auto operator/=(Rational a) -> Rational &
Definition rational.h:82
constexpr auto divide(Rational other) const -> Rational
Definition rational.h:44
constexpr auto operator+=(Rational a) -> Rational &
Definition rational.h:73
constexpr auto operator/(Rational a) const -> Rational
Definition rational.h:83
constexpr Rational()
Definition rational.h:11
constexpr auto inverted() const -> Rational
Definition rational.h:47
constexpr auto negated() const -> Rational
Definition rational.h:46
constexpr auto operator*=(Rational a) -> Rational &
Definition rational.h:79
constexpr auto add(Rational other) const -> Rational
Definition rational.h:30
constexpr Rational(T numerator, T denominator=1)
Definition rational.h:13
constexpr auto operator-=(Rational a) -> Rational &
Definition rational.h:76
constexpr auto negative() const -> bool
Definition rational.h:28
T m_denominator
Definition rational.h:90
constexpr auto operator+(Rational a) const -> Rational
Definition rational.h:74
constexpr auto operator*(Rational a) const -> Rational
Definition rational.h:80
T m_numerator
Definition rational.h:89
constexpr auto denominator() const -> T
Definition rational.h:26
Definition operations.h:11
constexpr auto lcm
Definition lcm.h:34
constexpr auto midpoint
Definition midpoint.h:36
Rational(T, U) -> Rational< meta::CommonType< T, U > >
constexpr auto gcd
Definition gcd.h:44
Definition zstring_parser.h:9