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
輸出
請先寫下預測,再執行。
用測試核對
用測試核對¶
測試用同值的不同分數檢查相等與雜湊,並確認零分母會被拒絕。
適用範圍
適用範圍¶
教學實作保留建構層次;較大的分子分母會放大底層一元自然數的成本。