52 static_assert(std::is_integral<T>::value &&
53 std::is_signed<T>::value,
54 "T must be signed integral type");
65 static T gcd(
T a,
T b)
135 explicit operator U()
const {
return U(num) / den; }
201 *
this = *
this + other;
212 *
this = *
this - other;
223 *
this = *
this * other;
235 *
this = *
this / other;
260 return lhs.num == rhs.num && lhs.den == rhs.den;
272 return !(lhs == rhs);
284 return lhs.num * rhs.den < rhs.num * lhs.den;
331 os << intmax_t(r.num);
333 os <<
'/' << intmax_t(r.den);
349 if (is >> std::ws, is.peek() ==
'/')
用于表示分数的基础模板类。
Definition rational.h:51
T numerator() const
取得分数的分子。
Definition rational.h:121
constexpr BasicRational()
默认构造函数,构造一个值为 0/1 的分数。
Definition rational.h:100
friend bool operator>=(const BasicRational &lhs, const BasicRational &rhs)
比较左操作数是否大于等于右操作数(ge)。
Definition rational.h:317
friend std::ostream & operator<<(std::ostream &os, const BasicRational &r)
将一个分数打印到指定输出流。
Definition rational.h:329
friend BasicRational operator*(const BasicRational &lhs, const BasicRational &rhs)
计算两个分数的积。
Definition rational.h:172
BasicRational operator-() const
返回相反数。
Definition rational.h:243
BasicRational operator+() const
返回自身。
Definition rational.h:249
friend bool operator<=(const BasicRational &lhs, const BasicRational &rhs)
比较左操作数是否小于等于右操作数(le)。
Definition rational.h:305
T denominator() const
取得分数的分母。
Definition rational.h:127
BasicRational & operator*=(const BasicRational &other)
就地版本,等价于 a = a * b。
Definition rational.h:221
friend bool operator!=(const BasicRational &lhs, const BasicRational &rhs)
比较两个分数是否不等(ne)。
Definition rational.h:269
BasicRational(T n, T d)
接受双参的构造函数,构造一个值为 n/d 的分数。
Definition rational.h:115
friend bool operator>(const BasicRational &lhs, const BasicRational &rhs)
比较左操作数是否大于右操作数(gt)。
Definition rational.h:293
BasicRational & operator+=(const BasicRational &other)
就地版本,等价于 a = a + b。
Definition rational.h:199
BasicRational & operator/=(const BasicRational &other)
就地版本,等价于 a = a / b。
Definition rational.h:233
friend BasicRational operator/(const BasicRational &lhs, const BasicRational &rhs)
计算两个分数的商。
Definition rational.h:186
friend std::istream & operator>>(std::istream &is, BasicRational &r)
从指定输入流读取一个分数。
Definition rational.h:344
friend BasicRational operator-(const BasicRational &lhs, const BasicRational &rhs)
计算两个分数的差。
Definition rational.h:158
BasicRational & operator-=(const BasicRational &other)
就地版本,等价于 a = a - b。
Definition rational.h:210
friend bool operator<(const BasicRational &lhs, const BasicRational &rhs)
比较左操作数是否小于右操作数(lt)。
Definition rational.h:281
friend bool operator==(const BasicRational &lhs, const BasicRational &rhs)
比较两个分数是否相等(eq)。
Definition rational.h:257
constexpr BasicRational(T n)
接受单参的构造函数,构造一个值为 n/1 的分数。
Definition rational.h:106
friend BasicRational operator+(const BasicRational &lhs, const BasicRational &rhs)
计算两个分数的和。
Definition rational.h:144
表示试图对无效的数学值域进行操作时抛出的异常。
Definition csexc.h:182
定义 console 库使用的自定义异常类层次结构。
BasicRational< int8_t > Rational_8
以 int8_t 为基的分数。
Definition rational.h:361
BasicRational< int16_t > Rational_16
以 int16_t 为基的分数。
Definition rational.h:362
BasicRational< int32_t > Rational_32
以 int32_t 为基的分数。
Definition rational.h:363
BasicRational< int64_t > Rational_64
以 int64_t 为基的分数。
Definition rational.h:364
BasicRational< intmax_t > Rational
以 intmax_t 为基的分数。
Definition rational.h:360