1#ifndef RATIONAL_NUMBER_H
2#define RATIONAL_NUMBER_H
17 : nominator(std::move(nominator)), denominator(std::move(denominator)) {
19 throw std::invalid_argument(
"Denominator cannot be zero.");
23 this->nominator = -this->nominator;
24 this->denominator = -this->denominator;
31 nominator /= gcd_value;
32 denominator /= gcd_value;
35 nominator = -nominator;
36 denominator = -denominator;
50 return {std::move(nominator), std::move(denominator)};
97 BigInteger n = nominator * other.denominator + other.nominator * denominator;
98 BigInteger d = denominator * other.denominator;
103 BigInteger n = nominator * other.denominator - other.nominator * denominator;
104 BigInteger d = denominator * other.denominator;
110 BigInteger d = denominator * other.denominator;
116 throw std::invalid_argument(
"Division by zero.");
125 *
this = *
this + other;
130 *
this = *
this - other;
135 *
this = *
this * other;
140 *
this = *
this / other;
146 return {-nominator, denominator};
155 throw std::invalid_argument(
"Cannot invert a zero rational number.");
157 return {denominator, nominator};
162 return {-nominator, denominator};
167 return {nominator.
abs(), denominator.
abs()};
177 return nominator == other.nominator && denominator == other.denominator;
181 return !(*
this == other);
185 return nominator * other.denominator < other.nominator * denominator;
189 return nominator * other.denominator <= other.nominator * denominator;
193 return nominator * other.denominator > other.nominator * denominator;
197 return nominator * other.denominator >= other.nominator * denominator;
Implements a class for representing and manipulating large integers beyond the native integer range.
Definition big_integer.hpp:22
std::string to_string() const
Definition big_integer.hpp:170
static BigInteger gcd(const BigInteger &a, const BigInteger &b)
Definition big_integer.hpp:731
static const BigInteger & one()
Definition big_integer.hpp:257
BigInteger abs() const
Definition big_integer.hpp:345
static const BigInteger & zero()
Definition big_integer.hpp:248
Definition rational_number.hpp:10
bool operator<(const RationalNumber &other) const
Definition rational_number.hpp:184
bool operator>(const RationalNumber &other) const
Definition rational_number.hpp:192
const BigInteger & getNominator() const
Definition rational_number.hpp:201
RationalNumber & operator=(const RationalNumber &other)=default
static RationalNumber create(BigInteger nominator, BigInteger denominator)
Definition rational_number.hpp:49
RationalNumber negate() const
Definition rational_number.hpp:161
static const RationalNumber & one()
Definition rational_number.hpp:78
bool operator>=(const RationalNumber &other) const
Definition rational_number.hpp:196
RationalNumber & operator*=(const RationalNumber &other)
Definition rational_number.hpp:134
const BigInteger & getDenominator() const
Definition rational_number.hpp:205
RationalNumber abs() const
Definition rational_number.hpp:166
RationalNumber operator+(const RationalNumber &other) const
Definition rational_number.hpp:96
RationalNumber operator-(const RationalNumber &other) const
Definition rational_number.hpp:102
bool operator<=(const RationalNumber &other) const
Definition rational_number.hpp:188
bool operator==(const RationalNumber &other) const
Definition rational_number.hpp:176
RationalNumber operator-() const
Definition rational_number.hpp:145
static const RationalNumber & zero()
Definition rational_number.hpp:68
RationalNumber & operator=(RationalNumber &&other) noexcept=default
RationalNumber & operator-=(const RationalNumber &other)
Definition rational_number.hpp:129
RationalNumber operator/(const RationalNumber &other) const
Definition rational_number.hpp:114
bool operator!=(const RationalNumber &other) const
Definition rational_number.hpp:180
RationalNumber operator*(const RationalNumber &other) const
Definition rational_number.hpp:108
static RationalNumber create(BigInteger nominator)
Definition rational_number.hpp:59
RationalNumber & operator+=(const RationalNumber &other)
Definition rational_number.hpp:124
RationalNumber & operator/=(const RationalNumber &other)
Definition rational_number.hpp:139
RationalNumber inverse() const
Definition rational_number.hpp:153
RationalNumber(RationalNumber &&other) noexcept=default
RationalNumber(const RationalNumber &other)=default
std::string to_string() const
Definition rational_number.hpp:171
Definition big_integer.hpp:14