52 static_assert(std::is_integral<T>::value && std::is_signed<T>::value,
53 "T must be signed integral type");
129 explicit operator U()
const {
191 *
this = *
this + other;
201 *
this = *
this - other;
211 *
this = *
this * other;
222 *
this = *
this / other;
257 return !(lhs == rhs);
312 template <
class CharT,
class Traits>
314 std::basic_ostream<CharT, Traits> &os,
const BasicRational &r) {
315 os << intmax_t(r.
num);
316 if (r.
den != 1) os <<
'/' << intmax_t(r.
den);
327 template <
class CharT,
class Traits>
328 friend std::basic_istream<CharT, Traits> &
333 if (is >> std::ws, is.peek() ==
'/') {
用于表示分数的基础模板类。
Definition rational.h:51
T numerator() const
取得分数的分子。
Definition rational.h:115
constexpr BasicRational()
默认构造函数,构造一个值为 0/1 的分数。
Definition rational.h:94
friend bool operator>=(const BasicRational &lhs, const BasicRational &rhs)
比较左操作数是否大于等于右操作数(ge)。
Definition rational.h:300
friend BasicRational operator*(const BasicRational &lhs, const BasicRational &rhs)
计算两个分数的积。
Definition rational.h:167
BasicRational operator-() const
返回相反数。
Definition rational.h:230
BasicRational operator+() const
返回自身。
Definition rational.h:236
friend std::basic_ostream< CharT, Traits > & operator<<(std::basic_ostream< CharT, Traits > &os, const BasicRational &r)
将一个分数打印到指定输出流。
Definition rational.h:313
friend bool operator<=(const BasicRational &lhs, const BasicRational &rhs)
Definition rational.h:289
T denominator() const
取得分数的分母。
Definition rational.h:121
intmax_t num
Definition rational.h:55
BasicRational & operator*=(const BasicRational &other)
就地版本,等价于 a = a * b。
Definition rational.h:210
friend bool operator!=(const BasicRational &lhs, const BasicRational &rhs)
比较两个分数是否不等(ne)。
Definition rational.h:256
BasicRational(T n, T d)
接受双参的构造函数,构造一个值为 n/d 的分数。
Definition rational.h:109
friend std::basic_istream< CharT, Traits > & operator>>(std::basic_istream< CharT, Traits > &is, BasicRational &r)
从指定输入流读取一个分数。
Definition rational.h:329
static T gcd(T a, T b)
求两个整数的最大公因数。
Definition rational.h:64
friend bool operator>(const BasicRational &lhs, const BasicRational &rhs)
比较左操作数是否大于右操作数(gt)。
Definition rational.h:278
BasicRational & operator+=(const BasicRational &other)
就地版本,等价于 a = a + b。
Definition rational.h:190
BasicRational & operator/=(const BasicRational &other)
就地版本,等价于 a = a / b。
Definition rational.h:221
friend BasicRational operator/(const BasicRational &lhs, const BasicRational &rhs)
计算两个分数的商。
Definition rational.h:180
friend BasicRational operator-(const BasicRational &lhs, const BasicRational &rhs)
计算两个分数的差。
Definition rational.h:154
intmax_t den
Definition rational.h:56
BasicRational & operator-=(const BasicRational &other)
就地版本,等价于 a = a - b。
Definition rational.h:200
friend bool operator<(const BasicRational &lhs, const BasicRational &rhs)
Definition rational.h:267
friend bool operator==(const BasicRational &lhs, const BasicRational &rhs)
比较两个分数是否相等(eq)。
Definition rational.h:245
void reduce()
辅助函数,用于约分一个分数。
Definition rational.h:79
constexpr BasicRational(T n)
接受单参的构造函数,构造一个值为 n/1 的分数。
Definition rational.h:100
friend BasicRational operator+(const BasicRational &lhs, const BasicRational &rhs)
计算两个分数的和。
Definition rational.h:141
DomainError(const std::string &msg)
构造 DomainError。
Definition csexc.h:167
定义 console 库使用的自定义异常类层次结构。
BasicRational< int8_t > Rational_8
以 int8_t 为基的分数。
Definition rational.h:343
BasicRational< int16_t > Rational_16
以 int16_t 为基的分数。
Definition rational.h:344
BasicRational< int32_t > Rational_32
以 int32_t 为基的分数。
Definition rational.h:345
BasicRational< int64_t > Rational_64
以 int64_t 为基的分数。
Definition rational.h:346
BasicRational< intmax_t > Rational
以 intmax_t 为基的分数。
Definition rational.h:342