03 · 有理数:交叉相乘与约分
有理数:交叉相乘与约分¶
把分数看作整数对,并让相等与运算不依赖所选的分子分母。
阅读本章前
你已经理解代表元、等价关系和规范化之间的区别。
完成本章后,你可以
- 用自己的话说明“有理数:交叉相乘与约分”中的数学定义
- 指出定义在 Python 数据中的表示方式
- 根据实际实现预测一段小规模执行过程
数学定义
分母非零时,`p/q` 与 `r/s` 相等当且仅当 `p*s=q*r`。这允许 `1/2` 与 `2/4` 表示同一有理数。
数据表示
`Rational` 保存整数分子和非零整数分母;构造后检查不变量,`reduction()` 只选择更易读的规范代表。
Python 实现
`p/q ~ r/s` → `p * s == q * r` → `Rational.__eq__`
与本章一起阅读的实现和测试
数学定义
数学定义¶
分母非零时,p/q 与 r/s 相等当且仅当 p*s=q*r。这允许 1/2 与 2/4 表示同一有理数。
数据表示
数据表示¶
Rational 保存整数分子和非零整数分母;构造后检查不变量,reduction() 只选择更易读的规范代表。
Python 实现
Python 实现¶
__eq__ 直接交叉相乘;__add__ 按共同分母公式构造新代表元;约分统一符号并除以最大公因数。
本课程使用的精确对应关系:
执行过程
执行过程¶
相等比较会下沉到整数乘法和相等,因此能看到数字塔如何复用既有定义。
运行前预测
预测相等比较的布尔值以及 `2/4` 约分后的输出。
实验 · 有理数:交叉相乘与约分
尚未运行
⌘ / Ctrl + Enter
输出
请先写下预测,再运行。
用测试核对
用测试核对¶
测试使用相同值的不同分数检查相等与哈希,并确认零分母被拒绝。
适用范围
适用范围¶
教学实现保留构造层次;较大分子分母会放大底层一元自然数的成本。