跳转至

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__`

与本章一起阅读的实现和测试

peano/rational.py · tests/test_rational.py

数学定义

数学定义

分母非零时,p/q 与 r/s 相等当且仅当 p*s=q*r。这允许 1/2 与 2/4 表示同一有理数。

数据表示

数据表示

Rational 保存整数分子和非零整数分母;构造后检查不变量,reduction() 只选择更易读的规范代表。

Python 实现

Python 实现

__eq__ 直接交叉相乘;__add__ 按共同分母公式构造新代表元;约分统一符号并除以最大公因数。

本课程使用的精确对应关系:

`p/q ~ r/s` → `p * s == q * r` → `Rational.__eq__`

执行过程

执行过程

相等比较会下沉到整数乘法和相等,因此能看到数字塔如何复用既有定义。

运行前预测

预测相等比较的布尔值以及 `2/4` 约分后的输出。

实验 · 有理数:交叉相乘与约分 尚未运行
⌘ / Ctrl + Enter
输出
请先写下预测,再运行。

用测试核对

用测试核对

测试使用相同值的不同分数检查相等与哈希,并确认零分母被拒绝。

适用范围

适用范围

教学实现保留构造层次;较大分子分母会放大底层一元自然数的成本。

关于“有理数:交叉相乘与约分”的实现,哪一种说法正确?