跳转至

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
輸出
請先寫下預測,再執行。

用測試核對

用測試核對

測試用同值的不同分數檢查相等與雜湊,並確認零分母會被拒絕。

適用範圍

適用範圍

教學實作保留建構層次;較大的分子分母會放大底層一元自然數的成本。

關於「有理數:交叉相乘與約分」的實作,哪一種說法正確?