除法

除法（英語、法語：division）是四則運算之一。除法運算的本質，就是「重複減法的簡化表達」。

例如：6÷3，就好像。

$\begin{cases} 6-3 = 3 \\ 3-3 = 0 \end{cases}$，$6$被$3$減了兩次後，就變成了$0$。

如果

$$a \times b = c$$

而且$b$不等於零，那麼

$$a = c \div b$$

其中，a稱為商數，b稱為除數，c稱為被除數。

如果除式的商數（$a$）必須是整數，則稱為帶餘除法，$a \times b$與$c$相差的數值，稱為餘數（$d$）。

$$c \div b = a \dots d$$

這也意味著

$$c = a \times b + d$$

在高等數學、科學、工程學和電腦程式語言中，$c \div b$寫成$c/b$。如果我們毋需知曉確切值，或者留待以後引用，這種形式也常稱之為分數的最終形式。其中尋找商數的函數為$\operatorname{div}$，尋找餘數（即模除）的函數則為$\operatorname{mod}$。

在代數結構範疇中，除法運算存在兩種基本形式，對應不同的數學結構定義：

- 帶餘除法（歐幾里得除法）：若代數結構中定義了帶餘除法（即存在商和餘數，且餘數的範數嚴格小於除數的範數），則該結構稱為歐幾里得整環。例如，一元多項式環（係數取自域）在其多項式次數構成的範數下構成歐幾里得整環。
- 無餘除法：若代數結構中所有非零元素均可逆（即對任意非零元素 $a$，存在 $b$ 使得 $ab=ba=1$），則該結構稱為域；若僅滿足乘法可逆性（不要求交換性），則稱為除環。例如，複數是域，而四元數是除環。

## 引言

首先，進入正題前，我們不妨來看兩個生活中的例子：

- 將500克糖果均分給8人：由$\dfrac{500}{8} = 62{{.}}5$可得，每人獲得62.5克糖果（無餘除法）
- 500克奶粉，按70克/份分配：由$\dfrac{500}{70} = 7{{.}}14\ldots$可得，可完整分配7份，餘量≈0.14份（帶餘除法）

其次，數學和物理存在許多「比例關係反演」：

- 已知某物體重力 $P=m\times g$，可得質量 $m=P/g$。
- 已知勻速直線運動狀態下，某物體行進距離 $d=v\times t$，可得時間 $t=d/v$。
- 對一般仿射關係 $y=ax+b$，其逆映射為 $x=(y-b)/a$。
- 當函數局部可線性化時（如泰勒展開一階近似）：$y=f(x)\approx f(x_0)+f'(x_0)\times(x-x_0)$。

可構造逆函數近似解：$x \simeq x_0 + \frac{f(x) - f(x_0)}{f'(x_0)}$；$f^{-1}(y) \simeq x_0 + \frac{y - f(x_0)}{f'(x_0)}$。

此乃牛頓迭代法求根的理論基礎：$f^{-1}(0) \simeq x_0 - \frac{f(x_0)}{f'(x_0)}$。

可見，在數學，尤其是在基本算術中，除法可視為「乘法的反運算」，也可理解為「重複的減法」。

## 定義

### 基本定義

首先，我們來定義整數間的帶餘除法。這一運算的核心，是將被除數表示為「除數的整數倍+餘數」的形式，且餘數需滿足特定條件。

具體而言，對於任意整數 $a$ 和非零整數 $b$，存在唯一的整數 $q$（商）和 $r$（餘數），使得：

$a=b\times q+r$ 且 $0\leq r<|b|$

其中，餘數 $r$ 的非負性及小於除數絕對值的性質確保了分解的唯一性。

該定義是數論中整除、同餘等概念的基礎，並廣泛用於模運算、輾轉相除法等演算法中。

帶餘除法的概念，已能凸顯除零問題的本質：如何將一個量分成0份？顯然，這沒有實際意義。

隨後，我們引入十進位數的概念，並通過遞歸處理餘數的方式擴展計算過程，由此便有了有理數的定義體系。至於實數，則在有理數基礎上拓展而成。

此時可以設想，將整體劃分為更小的單位份額，從而實現分數除法：將一個量除以 $0.1$（即$1/10$），意味著初始量相當於$1/10$個單位份額，進而求出完整單位的大小；而將一個量除以負數，則相當於計算需要移除的單位份額規模。

無理數無法直觀理解為具體數量，但可視為一種比——例如正方形對角線與邊長之比，或圓周長與其直徑之比。至此，除法運算不再能單純定義為「劃分」，而應理解為乘法逆運算。

基於此定義，除以零仍無意義。由於零乘任何數都得零（$0\times a =0$），零便有無窮多個乘法逆元。我們亦可從極限角度理解該問題——因為除以某數等價於乘以其倒數，故可將原問題轉化為函數$f(x)=1/x$在零點處極限的操作：當 $x$ 從左側趨近於零時，極限為$-\infty$，從右側趨近時，則為$+\infty$。

即便通過引入廣義實數集（即在實數軸上添加$-\infty$和$+\infty$這兩個「偽無窮大」）來擴展數系，問題仍未解決，因為極限值的符號不確定性依然存在。由此可見，除法在代數與數分中具有根本性意義。

### 其它定義

#### 環論中的除法定義

設 $(A,+,\times)$ 為整環，則 $A$ 上的除法運算定義為滿足以下條件的二元關係：

- 運算規則：對於任意 $a,\,b,\,c\in A$，$a \div b = c$，若且唯若 $b \times c = a$（其中 $b \neq 0$）。
- 唯一性：整環的乘法消去律保證除法結果唯一（若 $b \times c_1 = a$ 且 $b \times c_2 = a$，則 $c_1 = c_2$）。
- 定義域限制：除法僅在 $\mathrm{A} \times (\mathrm{A}-\{0\})$ 上有定義，即除數不能為零。

#### 從整環到域的擴展

若 A 為交換環，可通過等價關係擴展除法：

- 定義等價關係$\sim$：$(a,b)\sim(a',b')\iff a\times b' = a'\times b$，其等價類稱為分數，記為 $a/b$。
- 擴展後的集合$A / \sim$構成域（含乘法逆元），其中 $0 / 1$ 為加法單位元，$1 / 1$ 為乘法單位元。此即有理數域 $\mathbb{Q}$ 的構造基礎。

#### 關鍵限制與意義

- 除零禁止：零元無乘法逆元，故 $b = 0$ 時除法無定義。
- 環論中的除法是乘法的逆運算，強調代數結構。
- 歐幾里得除法側重整數間的帶餘除法（如上文的帶餘除法），兩者本質不同。

## 符號與表示

基礎算術中，除號「÷」仍被廣泛使用，而在代數與科學領域，除法通常用水平橫線（也被稱為分數分劃線）或斜槓表示被除數與除數的關係。除這三種以外，還有其它不同形式。

### 除號形式

用除號將被除數和除數相隔開：

$$a \div b$$

但實際上，除了在基礎算術外，這種形式並不常見。ISO 80000-2-10.6標準明確禁止使用該符號，因部分歐洲國家用 ÷ 表示減法，容易產生混淆。

### 分數分劃線形式

將被除數置於分數線上方，除數置於下方，例如：

$$\frac ab$$

該形式可讀作「a除以b」、「b除a」或「a比b」。

### 斜槓與反斜槓形式

在單行文本中，使用斜槓分隔被除數與除數，例如：

$$a/b$$

此寫法常見於程式語言和計算器輸入中。

另外，有部分數學軟體（如MATLAB、GNU Octave）採用反斜槓表示運算順序反轉的除法：

$b\backslash a$ (等價於$a/b$）

還有以上下標斜槓顯示的：

$${}^{a}\!/{}_{b}$$

### 冒號形式

在某些非英語國家，有的用冒號將被除數和除數相隔開：

$$a : b$$

此用法由奧特雷德於1631年最先引入，自萊布尼茲於1684年提倡以來，才為人廣泛應用。萊布尼茲更喜歡用同一個符號表示除法和比率。而在英語用法中，「:」一般只表示比率。

在大部分非英語語言中，$c:b$代表$c \div b$的比，讀做c比b；$c/b$則代表$c \div b$的比值。用法請參照比例。

除了以上這四種形式，美國自19世紀起便開始使用 $b)a$ 或 $b \overline{)a}$ 來單獨表示 $a$ 除以 $b$，尤常見於長除法中。時至今日，美國仍有零星人口使用這種寫法。

## 性質

嚴格而言，除法並不構成集合上的內部合成法則（一種二元運算），其所謂「性質」並不構成數集的結構特性，而應理解為分數形式的固有屬性。

### 非運算性質

- 非交換律：$5 \div 3 \neq 3 \div 5$
- 非結合律：$12 \div (4 \div 3) \neq (12 \div 4) \div 3$

### 特殊元素與等式關係

- 右單位元：對任意數 $a$，存在 $\dfrac a1 = a$。
- 左零吸收元：當 $b \neq 0$ 時，$\dfrac 0b = 0$。
- 同分母時：當 $b \neq 0$ 時，$\dfrac ab = \dfrac cb \iff a=c$。
- 通分等價：當 $b \neq 0 \wedge d \neq 0$ 時，$\dfrac ab = \dfrac cd \iff ad=bc$。
- 順序保持性：當 $b > 0$ 時，分數 $\dfrac ab$ 與 $\dfrac cb$ 的大小關係與原數 $a$ 和 $c$ 保持一致。

## 不同的除法運算

零除以任何非零的數都為零。即在被除數為零，除數非零的前提下，商數為零。

### 整數除法

整數集在除法運算下沒有封閉性，這意味著，兩個整數相除，結果不一定是整數。除零操作本身即無定義外，當被除數不是除數的整數倍時，商將呈現為非整數形式。

以26除以11為例，其商即便非整數，但也屬於有理數範疇。此時通常採用以下5種處理策略：

- 將此類除法視為偏函數，即當除法無法得到整數結果時直接判定為無定義。這種處理方式嚴格遵循數學定義，但會限制運算的應用範圍。
- 採用浮點近似法，將結果表示為帶有小數部分的實數。這是數值計算方面的通用做法，例如 $26 \div 11 = 2.3636...$ 該方法通過犧牲精確性來換取運算的普適性，但可能引入捨入誤差。
- 通過分數形式保持精確性，將結果表示為既約分數$\tfrac{26}{11}$或帶分數$2 \tfrac 4{11}$。這種處理要求分子分母的最大公約數為1，例如$\tfrac{52}{22}$經約簡後同樣得到$\tfrac{26}{11}$。分數體系通過引入有理數集 $\mathbb{Q}$，使整數除法在更廣泛的數系中保持封閉性。
- 採用歐幾里得除法，將結果分解為商和餘數的組合形式：$\tfrac{26}{11} = 2 \mbox{ remainder } 4.$ 這種表達式滿足$0\leq 4<11$，其數學基礎可追溯至《幾何原本》中關於線段分割的公理體系。該處理方式在密碼學和算法設計中具有重要應用，如RSA加密演演算法中的模冪運算。
- 實施整數截斷，直接取商的地板值（floor function），即$\tfrac{26}{11} = 2$。該處理方式在程式語言中普遍使用，如C語言的整數除法運算符「/」默認採用此規則。但需要注意的是：
- 不同語言對負數處理存在差異。例如，C語言採用向零取整（T-division），而Python採用向下取整（F-division）。
- 不同語言對整數除法的實現存在顯著差異。例如，MATLAB和電腦代數系統通常返回精確分數，而Java、C++等語言則返回截斷後的整數。為獲取完整結果，多數語言提供輔助函數，如Python的divmod可同時獲取商和餘數，Java的Math.floorDiv可實現地板值除法。
- 術語方面，「div」、「/」、「\」等符號在不同語境下可能代表不同運算規則。例如，C++中的「/」運算符對整數執行截斷除法，而對浮點數執行精確除法；Python的「//」運算符則嚴格實施地板值除法。這種語義差異要求程式員必須明確上下文環境。

欲快速判定整數可除性（整除性），可藉助整除規則：如2的倍數末位為偶數，3的倍數各位數字之和可被3整除等。這些規則本質上是數論中同餘理論的特例。

### 有理數除法

在除數非零的前提下，兩個有理數相除，結果仍為有理數。

具體而言，對於有理數$\frac pq$和$\frac rs$（其中 $p, q, r, s$均為整數且 $q, s\neq 0$），其除法運算可表示為：

$${p/q \over r/s} = {p \over q} \times {s \over r} = {ps \over qr}$$

該公式表明，有理數的除法本質上是乘以除數的倒數。所有參與運算的量均為整數，且僅有分子 $p$ 允許為零（此時結果為有理數0）。

這一定義嚴格保證了除法與乘法的逆運算關係：若 $\frac ab \div \frac cd = \frac ef$，則必然滿足 $\frac ef \times \frac cd = \frac ab$。

### 實數除法

由有理數除法可得，在除數非零的前提下，兩實數相除，結果仍為實數。

### 複數除法

#### 代數形式的複數除法

對於兩個非零複數 $p+iq$ 和 $r+is$（其中 $p,\,q,\,r,\,s\in \mathbb{R}$，且 $r$ 和 $s$ 不同時為零），其除法運算通過分母實數化實現。先將分子和分母同時乘以分母的共軛複數 $r-is$，分子展開後再分離實部與虛部，即

$${p+iq \over r+is} = {(p+iq)(r-is) \over (r+is)(r-is)} = {pr+qs + i(qr-ps) \over r^2+s^2} = {pr+qs \over r^2+s^2} + i{qr-ps \over r^2+s^2}$$

該方法通過消去分母的虛部實現有理化，分母變為實數。

#### 極坐標形式的複數除法

當上文複數表示為極坐標形式 $pe^{iq}$ 和 $re^{is}$ （與上述條件相同外， $p, r>0$）時，運算可進一步簡化為：

$${p e^{iq} \over r e^{is}} = {p e^{iq} e^{-is} \over r e^{is} e^{-is}} = {p \over r}e^{i(q - s)}$$

該方法直接利用歐拉公式的性質，避免了複雜的代數運算。

### 多項式除法

和整數之間的帶餘除法類似，一元多項式之間也可以進行帶餘除法。

證明：

設有多項式$A$和非零多項式$B$，則存在唯一的多項式$Q$和$R$，滿足：

$$A = BQ + R$$

而多項式$R$若非零多項式，則其冪次嚴格小於$B$的冪次。

作為特例，如果要計算某個多項式$P$除以一次多項式$X-a$得到的餘多項式，可以直接將$a$代入到多項式$P$中。$P$除以$X-a$的餘多項式是$P(a)$。

具體的計算可以使用類似直式除法的方式。例如，計算$X^3 - 12X^2 - 42$除以$X-3$，列式如下：

$$\begin{matrix} \qquad\quad\;\, X^2 \; - 9X \quad - 27\\ \qquad\quad X-3\overline{\vert X^3 - 12X^2 + 0X - 42}\\ \;\; \underline{\;\;X^3 - \;\;3X^2}\\ \qquad\qquad\quad\; -9X^2 + 0X\\ \qquad\qquad\quad\; \underline{-9X^2 + 27X}\\ \qquad\qquad\qquad\qquad\qquad -27X - 42\\ \qquad\qquad\qquad\qquad\qquad \underline{-27X + 81}\\ \qquad\qquad\qquad\qquad\qquad\qquad\;\; -123 \end{matrix}$$

因此，商式是$\ X^2 - 9X - 27$，餘式是$\ -123$。

### 矩陣除法

矩陣除法可通過逆矩陣運算實現，通常定義為右除：對於可逆方陣 $A$ 和 $B$，其除法運算表示為：

$$A / B = A \cdot B^{-1}$$

其中 $B^{-1}$ 為 $B$ 的逆矩陣。為避免歧義，該運算更常見於顯式寫出乘積形式 $AB^{-1}$。

此外，矩陣的元素級除法可通過阿達瑪積定義，即對應元素相除：

${A \over B} = A \circ B$ （要求 $B$ 元素非零）

### 抽象代數除法

抽象代數中，給定一個帶有二元運算 * 的廣群，左除（記為 a \ b）通常定義為滿足方程 1=a ∗ x = b 的解 $x$，類似地，右除記為 b / a）通常定義為滿足方程 1=y ∗ a = b 的解 $y$。這種除法定義不要求運算 * 具有交換性、結合性或單位元等性質。若一個廣群中，所有元素對 $a$ 和 $b$ 的左除和右除均存在且唯一（即滿足拉丁方陣），則該廣群稱為擬群。在擬群中，即使沒有單位元和逆元，這種除法運算始終可行。

#### 消去性質與除法運算的擴展

在任意廣群中，若元素 $a$ 滿足消去律，則可通過 $a$ 對元素進行消去操作。例如：

- 矩陣代數中，可逆矩陣的左乘或右乘滿足消去律。
- 四元數代數中，非零元素滿足消去律。
- 擬群的結構天然支持消去操作。

在整環中，雖然並非所有元素都有逆元，但對可消去元素 $a$，仍可對形如 $ab$ 或 $ca$ 的元素進行左除（1=a \ (ab) = b）或右除（1=(ca) / a = c）。進一步地，若一個有限環的所有非零元素均滿足消去性質，則根據鴿巢原理，每個非零元素必為可逆元，從而該環成為除環，此時任意非零元素均可作除法。

#### 除法代數的分類與博特周期性

博特周期性定理表明，對於滿足特定條件的代數結構（如有限維實範數除法代數），其僅能與以下四類結構同構：

- 實數域 $\mathbb{R}$（維度 1）。
- 複數域 $\mathbb{C}$（維度 2）。
- 四元數代數 $\mathbb{H}$（維度 4）。
- 八元數代數 $\mathbb{O}$（維度 8）。

這一分類結果揭示了除法代數維度的內在規律性，並在拓撲學與量子場論中具有重要應用。

### 二進位除法

講完以上十進位除法，我們來介紹電腦科學領域更為常見的二進位編碼數除法。

#### 二元歐幾里得除法

首先，我們來思考兩個正整數 $a$ 和 $b$ 的除法運算，採用歐幾里得除法。

設 $a$ 和 $b$ 均為 $n$ 位二進位數，其中 $a(i)$ 表示第 $i$ 位（從右向左，編號為 $0$ 至 $n-1$），$a(i:j)$ 表示從第 $i$ 位到第 $j$ 位的連續位段。以下偽代碼（因詞彙採用法語而非英語，如無另外說明，以下偽代碼詞彙皆用法語）實現了該除法的商 $Q$ 和餘數 $R$ 的計算：

```text
fonction [Q, R] = diviser(a, b)

    si b == 0 alors génère l'exception "division par zéro" ;
    
    Q := 0 ; R := a ; // initialisation
    pour i = n-1 → 0
        si a(n:i) >= b alors
            Q(i) = 1 ; // i-ème bit du quotient
            R = a(n:i) - b ; // reste
        fin
     fin
     retourne [Q, R] ;
fin
```

演算法從被除數的最高位開始，逐步截取與除數同長度的位段（記為 $a(n:i)$），並判斷是否滿足 $a(n:i)\geq b$。若當前截取的被除數高位段（從最高位開始逐步擴展）小於除數，則商的對應位為0；若該位段數值大於等於除數b，則通過一次減法操作確定商的當前位為1，並更新餘數 $R = a(n:i) -b$。

原始偽代碼通過逐位比較實現，而優化版本有以下改進：

```text
fonction [Q, R] = diviser(a, b)

    si b == 0 alors génère l'exception "division par zéro" ;

    Q := 0 ; R := 0 ; // initialisation
    pour i = n-1 → 0
        R = décalage_à_gauche_de_bits(R, 1) ; // équivaut à rajouter un 0 à droite
        R(1) = a(i) ; // le bit de poids faible de R est le i-ème bit du numérateur
        si R >= b alors
            Q(i) = 1 ; // i-ème bit du quotient
            R = R - b ; // reste
        fin
    fin
    retourne [Q, R] ;
fin
```

而對於浮點數，只需將其分解為尾數和指數，公式為：

$$\frac{2^m\,a}{2^n\,b}=2^{m-n}\frac ab$$

但需處理捨入誤差，如採用捨入到最近偶數策略。

總之，該演算法僅需比較、位移、減法三種基本操作，體現了電腦算術運算中位級優化的核心思想，適合在微處理器中通過組合邏輯電路或狀態機實際操作。

#### 相對較慢的演算法

設被除數 $a$ 和除數 $b$ 均為 $n$ 位二進位數，其中 $a(i)$ 表示第 $i$ 位（從右向左，編號為 $0$ 至 $n-1$），$a(i:j)$ 表示從第 $i$ 位到第 $j$ 位的連續位段。算法核心思想是通過遞推關係構造商 $Q$ 和餘數 $R$。

在第 $i$ 步迭代中，餘數更新公式為：

$$R_i=B\times R_{i-1}-Q_{n-i}\times b$$

若當前餘數 $R_{i-1}$ 左移後大於等於除數 $b$，則商位 $Q_{n-i}=1$，更新餘數

$$R_i=2\times R_{i-1}-b$$

若結果為負，則商位 $Q_{n-i}=0$，需恢復餘數

$R_i=2\times R_{i-1}+b$（通過加回除數實現）

此演算法下，原始版本偽代碼如下：

```text
fonction [Q, R] = diviser(a, b)

    si b == 0 alors génère l'exception "division par zéro" ;

    R := a // valeur initiale du reste
    b := décalage_à_gauche_de_bits(b, n)
    pour i = n-1 → 0
        R := décalage_à_gauche_de_bits(b, 1)
        si R >= b alors
             Q(i) := 1 // le i-ème bit de i est 1
             R = R - b
        sinon
             Q(i) := 0 // le i-ème bit de i est 0
        fin
    fin
    retourner[Q, R]
fin
```

優化版本偽代碼如下：

```text
fonction [Q, R] = diviser(a, b)

    si b == 0 alors génère l'exception "division par zéro" ;

    R := a // valeur initiale du reste
    b := décalage_à_gauche_de_bits(b, n)
    pour i = n-1 → 0
        R := 2*R - b // le reste décalé est-il supérieur à b ?
        si R >= 0 alors
            Q(i) := 1 // le i-ème bit de i est 1
        sinon
            Q(i) := 0 // le i-ème bit de i est 0
            R := R + b // on restaure la valeur du reste en gardant le décalage
        fin
    fin
    retourner[Q, R]
fin
```

由於循環中的最後一條語句，這種演算法被稱為「帶恢復的除法」。通過引入+1和-1商位生成機制，可改進為無恢復餘數演算法。

例如，二進位數`11101010`可通過以下方式計算：

11101010 -00010101 ---------11010101，通過商位符號擴展避免餘數恢復步驟。

無恢復餘數演算法偽代碼如下：

```text
fonction [Q, R] = diviser(a, b)

    si b == 0 alors génère l'exception "division par zéro" ;

    R[0] := a
    i := 0
    tant que i < n
        si R[i] >= 0 alors
            Q[n-(i+1)] := 1
            R[i+1] := 2*R[i] - b
        sinon
            Q[n-(i+1)] := -1
            R[i+1] := 2*R[i] + b
        fin
        i := i + 1
    fin
    Q = transforme(Q)
    retourner[Q, R]
fin
```

另外，還有SRT演算法，一種通過商位查找表的非恢復方法。

#### 相對更快的演算法

快速除法的核心思想，是通過計算倒數實現除法運算，即先計算 $x=1/b$，再通過乘法 $Q=a\times x$ 得到商。此乃牛頓-拉夫森法，其數學形式為：

$$x_i = x_{i - 1} - \frac{f_b(x_{i - 1})}{f'_b(x_{i - 1})}$$

其中，函數 $f_b(x) = 0$ 的零點即為 $1/b$。迭代公式可簡化為：

$$x_i = x_{i-1} + x_{i-1} (1-b x_{i-1})$$

為加速收斂，需對 $1/b$ 進行初始估計。先將除數 $b$ 的二進位指數對齊至區間 $[0,5;1]$，再採用預計算的線性近似公式：

$$x_0 = \frac{48}{17} - \frac{32}{17}b\ (\simeq 2{{,}}82 - 1,88 b)$$

其中係數 $48/17$ 和 $32/17$ 已預先存儲為常量。

牛頓-拉夫森法具有二次收斂性，誤差隨迭代次數指數級下降。對於 $p$ 位精度，所需迭代次數為：

$$s = \log_2 \left ( \frac{p + 1}{\log_2 17} \right )$$

欲求單精度浮點數（24位尾數），需要約3次迭代；欲求雙精度浮點數（53位尾數），則需約4次迭代。

牛頓-拉夫森法偽代碼如下：

```text
fonction [Q] = diviser(a, b)
    e := exposant(b) // b = M*2^e (représentation en virgule flottante)
    b' := b/2^{e + 1} // normalisation ; peut se faire par un décalage de e+1 bits à droite
    a' := a/2^{e + 1} // 0.5 <= b <= 1 ; a'/b' = a/b
    X := 48/17 - 32/17*b' // initialisation de la méthode de Newton
    pour i = 1 → s // s précalculé en fonction du nombre p de bits de la mantisse
        X := X + X*(1 - b*X)
    fin
    Q := a'*X
    retourne[Q]
fin
```

至於高施密特法，則是基於倒數逼近原理實現除法運算。其核心思想是通過構造因子序列

$$F_k=f_k\times f_{k-1}\times \ldots f_1 =\prod(f_i)$$

使得歸一化後的除數b滿足收斂條件

$b_k=F_k \times b \Longrightarrow 1$。

## 整除

<image>

整除是數學中兩個自然數之間的一種關係。自然數$a$可以被自然數$b$整除，是指$b$是$a$的因數，且a是b的整數倍數，也就是$a$除以$b$沒有餘數。

$$a \div b = q \dots 0$$

因數判別法可參照整除規則。

### 表示方法

$b \mid a$表示$b$整除$a$，即$a$是$b$的倍數，$b$是$a$的因數。

### 舉例

$15$可以被$5$整除，記作$5 \mid 15$。

$20$不能被$6$整除（因為餘數為$2$），記作$6 \nmid 20$。在$\mid$上加一條斜線即表示不整除。

## 運算方法

根據乘法表，兩個整數可以用長除法（直式除法）筆算。如果被除數有分數部分（或者說時小數點），計算時將小數點帶下來就可以；如果除數有小數點，將除數與被除數的小數點同時移位，直到除數沒有小數點。

算盤也可以做除法運算。

### 長除法

長除法俗稱「長除」，適用於正式除法、小數除法、多項式除法（即因式分解）等較重視計算過程和商數的除法，過程中兼用了乘法和減法。

使用長除法計算的過程可以表示為：

<image>

$$\begin{array}{l} 37 \ \big) \\ \\ \\ \\ \\ \\ \\ \\ \end{array} \! \! \! \! \! \begin{array}{r} 34061 \\ \hline \ 1260257 \\ 111 \quad \quad \\ \hline 150 \quad \ \ \\ 148 \quad \ \ \\ \hline 225 \ \ \\ 222 \ \ \\ \hline 37 \\ 37 \\ \hline 0 \\ \end{array}$$

### 短除法

短除法是長除法的簡化版本。在短除法裏，被除數放中央，旁以一L型符號表示除法，被除數左側為除數，下側為商，省去了長除法逐層計算的過程。

$$\begin{array}{r} 7 \ | \! \underline{\, \ 3.00000000000000000 \dots \ } \\ 0.42857142857142857 \dots \ \end{array}$$

$$\begin{array}{r} 2 \ | \! \underline{\, \ \ \ 420 \ } \\ 2 \ | \! \underline{\, \ \ 210 \ } \\ 3 \ | \! \underline{\, \ 105 \ } \\ 5 \ | \! \underline{\, \ 35 \ } \\ 7 \ \end{array}$$

$$420 = 2^2 \times 3 \times 5 \times 7$$

- 使用短除法計算$420,270$的最大公因數及最小公倍數：

$$\begin{array}{r} 2 \ | \! \underline{\, \ \ \ 420 \quad 270 \ } \\ 3 \ | \! \underline{\, \ \ 210 \quad 135 \ } \\ 5 \ | \! \underline{\, \ 70 \quad \ \ 45 \ } \\ 14 \quad \ \ \ \ 9 \ \end{array}$$

$$\begin{cases} \gcd(420, 270) = 2 \times 3 \times 5 = 30 \\ \operatorname{lcm}(420, 270) = 2 \times 3 \times 5 \times 14 \times 9 = 3780 \end{cases}$$

### 尺規作圖法

類似於乘法、冪運算和平方根，除法同樣可以用尺規作圖來表示。下文將展示兩種不同的操作方法：

一種方法是作圓法。

兩幅附圖分別展示了一種簡潔解法，該解法同時適用於 $a:b$ 及其倒數 $b:a$。圖中的虛線圓和弧並非解題所需，而憑通過弦定理，更清晰地展示證明過程。為方便對比，圖中各點的命名與弦定理引言圖一致。

以下僅針對$a<b$ 的情況（圖1）說明構造步驟（至於 $a>b$ 的情況，見圖2）：

<image>

<image>

- 在數軸上，將長度 $a$ 和 $b$ 的兩條共線線段分別標記為線段 $\overline{DS}$ 和 $\overline{SB}$。
- 過點 $S$ 作 $\overline{DB}$ 的垂線，並作一條與 $\overline{DB}$ 距離為1的平行線，兩線交於點 $C$。為確定過點 $C$ 的弧 $k_b$ 的圓心 $M$，需作弦 $\overline{DC}$ 和 $\overline{CB}$ 的兩條中垂線（圖中未畫出）。
- 繪製弧 $\mathrm{arc}\; MBD$，其與另一輔助線交於點 $E$。
- 連接點 $D$ 和 $E$，該連線與過 $C$ 作的垂線交於 $C'$。
- 從點 $B$ 出發，作過 $E$ 的射線，直至其與過 $C$ 作的垂線交於 $C''$。

至此，構造基本完成。為避免出現重疊， $\overline{FD}$ 與 $\overline{C''S}$ 的長度關係需單獨說明。

對圖1的證明：

在以 $M'$ 為圓心的圓 $k_2$ 中應用弦定理可得：

$$\overline{A'S} \cdot \overline{C'S} = \overline{BS} \cdot \overline{DS} \Rightarrow$$

$$a:b = \overline{C'S} = \frac{\overline{BS}\cdot\overline{DS}}{\overline{A'S}}.$$

在以 $M''$ 為圓心的圓 $k_3$ 中應用弦定理可得：

$$\overline{A''S} \cdot \overline{C''S} = \overline{BS} \cdot \overline{DS} \Rightarrow$$

$$b:a = \overline{C''S} = \overline{FD} = \frac{\overline{BS}\cdot\overline{DS}}{\overline{A''S}}.$$

另一種方法是利用截線定理，用尺規作全等三角形。（圖3）具體步驟如下：

<image>

- 自點 $A$ 引出第一條射線。
- 在該射線上，以 $A$ 為起點，先截取長度為 $1$ 的線段 $\overline{AE}$，再截取長度為 $b$ 的線段 $\overline{AB}$。
- 自點 $B$ 出發，在與 $\overline{AB}$ 成任意角 $\alpha$ 的方向上截取長度為 $a$ 的線段 $\overline{BD}$。
- 過點 $D$ 作自點 $A$ 引出的第二條射線。
- 自點 $E$ 作與 $\overline{BD}$ 平行的直線，該直線與第二條射線的交點 $C$ 所對應的線段 $\overline{EC}$ 即為所求商 $\frac{a}{b}$ 的長度。

## 關於「除以零」

### 「除以零」有意義嗎？

在標準數學體系中，除以零被定義為「未定義」操作，因其與「零乘任何有限數恆為零」相悖，計算器輸入此類表達式也會報錯。但在零環和輪代數等高階數學結構中，通過重新定義運算規則，除以零可被賦予特定意義。

### 1 : 0 是否等於∞?

<image>

部分人認為，這個問題應當賦予「∞」的解，因為經驗表明，當分配者數量趨近於零時，每個個體獲得的量會趨向無限。然而，這種直覺在數學體系中會引發根本性矛盾。

首先，引入「∞」這一「值」將導致環及其算術體系的瓦解。具體表現為：

- 傳統算術運算規則失效（如 ∞ $-$ ∞ 未定義）
- 出現大量不定式（如$1 : 0$型表達式）
- 需另外建立特殊處理法則

其次，通過極限理論，在x=0處，函數 $\tfrac{1}{x}$ 同時具有正負兩個方向的發散趨勢：

- 右極限：$\lim_{x\to +0} \tfrac{1}{x} = +\infty.$
- 左極限：$\lim_{x\to -0} \tfrac{1}{x} = -\infty.$

由於正負無窮不可比較，該點不存在傳統意義上的極限值。

而且，在有理數集 $\Q$ 和實數集 $\R$ 中，引入無窮大會破壞原有序關係，導致比較運算的邏輯悖論。

最後，直接承認方程 $0 \cdot x = 1$ 無解具有顯著優勢：

- 保持算術體系自洽性
- 避免引入矛盾性概念
- 更利於誤差處理（如編程中的除零異常）

接受該方程無解的樸素事實，並藉助分析學工具（如洛必達法則）處理相關問題，是更為合理且自洽的解決方案。