13 uint32_t AbsToUnsigned(int32_t
x) {
14 return static_cast<uint32_t
>(std::abs(
x));
19 if (den_ == that.den_) {
20 return num_ == that.num_;
21 }
else if ((num_ >= 0) != (that.num_ >= 0)) {
24 return AbsToUnsigned(num_) * that.den_ == AbsToUnsigned(that.num_) * den_;
29 if (den_ == that.den_) {
30 return num_ < that.num_;
31 }
else if ((num_ >= 0) != (that.num_ >= 0)) {
32 return num_ < that.num_;
34 return AbsToUnsigned(num_) * that.den_ < AbsToUnsigned(that.num_) * den_;
42 uint64_t gcd = std::gcd(num_, den_);
43 return ((num_ / gcd) << 32) | (den_ / gcd);
50 return Rational(-1 *
static_cast<int32_t
>(den_), std::abs(num_));
constexpr Rational(int32_t num)
bool operator<(const Rational &that) const
bool operator==(const Rational &that) const