除法

維基百科,自由的百科全書
(重新導向自
跳至導覽 跳至搜尋
File:Divide20by4.svg
將20個蘋果平均分成四等分(左上),每份有5個蘋果(右下),即<math>{ {20}\div {4} } = 5 </math>;亦可以說成,將20個蘋果每5個分成一份(右下),共可分成四等分(左上),此時可以表達為<math>{ {20}\div {5} } = 4 </math>

除法(英語、法語:division)是四則運算之一。除法運算的本質,就是「重複減法的簡化表達」。

例如:<math>{ {6}\div {3} } = 2 </math>,就好像<math>{ {{ {6}3} }{3} } = 0 </math>, <math> \begin{cases} 6-3 = 3 \\ 3-3 = 0 \end{cases} </math>,<math>6</math>被<math>3</math>減了兩次後,就變成了<math>0</math>。

如果

<math>a \times b = c </math>

而且<math>b</math>不等於,那麼

<math>a = c \div b </math>

其中,a稱為商數,b稱為除數,c稱為被除數

如果除式的商數(<math>a</math>)必須是整數,則稱為帶餘除法,<math>a \times b</math>與<math>c</math>相差的數值,稱為餘數(<math>d</math>)。

<math>c \div b = a \dots d</math>

這也意味着

<math>c = a \times b + d</math>

高等數學科學工程學計算機程式語言中,<math>c \div b</math>寫成<math>c/b</math>。如果我們毋需知曉確切值,或者留待以後引用,這種形式也常稱之為分數的最終形式。其中尋找商數的函數為<math>\operatorname{div}</math>,尋找餘數(即模除)的函數則為<math>\operatorname{mod}</math>。

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

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

引言[編輯]

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

  • 將500克糖果均分給8人:由<math>\dfrac{500}{8} = 62{{.}}5</math>可得,每人獲得62.5克糖果(無餘除法)
  • 500克奶粉,按70克/份分配:由<math>\dfrac{500}{70} = 7{{.}}14\ldots </math>可得,可完整分配7份,餘量≈0.14份(帶餘除法)

其次,數學和物理存在許多「比例關係反演」法語Loi affine

可構造逆函數近似解:<math>x \simeq x_0 + \frac{f(x) - f(x_0)}{f'(x_0)}</math>;<math>f^{-1}(y) \simeq x_0 + \frac{y - f(x_0)}{f'(x_0)}</math>;
此乃牛頓迭代法求根的理論基礎:<math>f^{-1}(0) \simeq x_0 - \frac{f(x_0)}{f'(x_0)}</math>。

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

定義[編輯]

基本定義[編輯]

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

具體而言,對於任意整數 <math>a</math> 和非零整數 <math>b</math>,存在唯一的整數 <math>q</math>(商)和 <math>r</math>(餘數),使得:

<math>a=b\times q+r</math> 且 <math>0\leq r<|b| </math>

其中,餘數 <math>r</math> 的非負性及小於除數絕對值的性質確保了分解的唯一性。

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

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

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

此時可以設想,將整體劃分為更小的​​單位份額​​,從而實現分數除法:將一個量除以 <math>0.1</math>(即<math>1/10</math>),意味着初始量相當於<math>1/10</math>個單位份額,進而求出完整單位的大小;而將一個量除以負數,則相當於計算需要移除的單位份額規模。

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

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

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

其它定義[編輯]

環論中的除法定義[編輯]

設 <math>(A,+,\times)</math> 為整環,則 <math>A</math> 上的​​除法運算​​定義為滿足以下條件的二元關係:

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

從整環到域的擴展[編輯]

若 A 為交換環,可通過​​等價關係​​擴展除法:

  • 定義等價關係<math>\sim</math>:<math>(a,b)\sim(a',b')\iff a\times b' = a'\times b</math>,其等價類稱為​​分數​​,記為 <math>a/b</math>;
  • 擴展後的集合<math>A / \sim</math>構成(含乘法反元素),其中 <math>0 / 1</math> 為加法單位元素,<math>1 / 1</math> 為乘法單位元素。此即有理數體 <math>\mathbb{Q}</math> 的構造基礎。

關鍵限制與意義[編輯]

  • 除零禁止​​:零元素無乘法反元素,故 <math>b = 0</math> 時除法無定義。
  • 與歐幾里得除法的區別​​:
    • 環論中的除法是乘法的逆運算,強調代數結構
    • 歐幾里得除法側重整數間的帶餘除法(如上文的帶餘除法),兩者本質不同。

符號與表示[編輯]

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

除號形式[編輯]

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

<math>a \div b</math>

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

分數分劃線形式[編輯]

將​​被除數​​置於分數線上方,​​除數​​置於下方,例如:

<math>\frac ab</math>

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

斜槓與反斜槓形式[編輯]

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

<math>a/b</math>

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

另外,有部分數學軟件(如MATLABGNU Octave)採用反斜槓表示運算順序反轉的除法:

<math>b\backslash a</math> (等價於<math>a/b</math>)

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

<math>{}^{a}\!/{}_{b}</math>

冒號形式[編輯]

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

<math>a : b</math>

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

在大部分非英語語言中,<math>c:b</math>代表<math>c \div b</math>的,讀做c比b;<math>c/b</math>則代表<math>c \div b</math>的比值。用法請參照比例

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

性質[編輯]

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

非運算性質[編輯]

  1. 非交換律​​:<math>5 \div 3 \neq 3 \div 5</math>
  2. 非結合律​​:<math>12 \div (4 \div 3) \neq (12 \div 4) \div 3 </math>

特殊元素與等式關係[編輯]

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

不同的除法運算[編輯]

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

整數除法[編輯]

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

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

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

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

有理數除法[編輯]

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

具體而言,對於有理數<math>\frac pq</math>和<math>\frac rs</math>(其中 <math>p, q, r, s</math>均為整數且 <math>q, s\neq 0</math>),其除法運算可表示為:

<math display="block">{p/q \over r/s} = {p \over q} \times {s \over r} = {ps \over qr}</math>

該公式表明,有理數的除法本質上是乘以除數的倒數。所有參與運算的均為整數,且僅有分子 <math>p</math> 允許為零(此時結果為有理數0)。

這一定義嚴格保證了除法與乘法的逆運算關係:若 <math>\frac ab \div \frac cd = \frac ef</math> ,則必然滿足 <math>\frac ef \times \frac cd = \frac ab</math> 。

實數除法[編輯]

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

複數除法[編輯]

代數形式的複數除法[編輯]

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

<math display="block">{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}</math>

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

極坐標形式的複數除法[編輯]

當上文複數表示為極坐標形式 <math>pe^{iq}</math> 和 <math>re^{is}</math> (與上述條件相同外, <math>p, r>0</math> )時,運算可進一步簡化為:

<math display="block">{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)} </math>

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

多項式除法[編輯]

整數之間的帶餘除法類似,一元多項式之間也可以進行帶餘除法。 證明:

設有多項式<math>A</math>和非零多項式<math>B</math>,則存在唯一的多項式<math>Q</math>和<math>R</math>,滿足:

<math>A = BQ + R </math>

而多項式<math>R</math>若非零多項式,則其冪次嚴格小於<math>B</math>的冪次。

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

具體的計算可以使用類似直式除法的方式。例如,計算<math> X^3 - 12X^2 - 42</math>除以<math>X-3</math>,列式如下:

<math>

\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} </math>

因此,商式是<math>\ X^2 - 9X - 27 </math>,餘式是<math>\ -123 </math>。

矩陣除法[編輯]

矩陣除法可通過逆矩陣運算實現,通常定義為右除​​:對於可逆方陣 <math>A</math> 和 <math>B</math> ,其除法運算表示為:

<math>A / B = A \cdot B^{-1}</math>

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

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

<math>{A \over B} = A \circ B </math> (要求 <math>B</math> 元素非零)

抽象代數除法[編輯]

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

消去性質與除法運算的擴展[編輯]

在任意廣群中,若元素 <math>a</math> 滿足消去律,則可通過 <math>a</math> 對元素進行消去操作。例如:

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

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

除法代數的分類與博特週期性[編輯]

博特週期性定理表明,對於滿足特定條件的代數結構(如有限維實範數除法代數),其僅能與以下四類結構同構:

  • 實數體 <math>\mathbb{R}</math>(維度 1);
  • 複數域 <math>\mathbb{C}</math>(維度 2);
  • 四元數代數 <math>\mathbb{H}</math>(維度 4);
  • 八元數代數 <math>\mathbb{O}</math>(維度 8)。

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

二進制除法[編輯]

講完以上十進制除法,我們來介紹計算機科學領域更為常見的二進制編碼數除法。

二元歐幾里得除法[編輯]

首先,我們來思考兩個正整數 <math>a</math> 和 <math>b</math> 的除法運算,採用歐幾里得除法

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

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

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

原始偽代碼通過逐位比較實現,而最佳化版本有以下改進:

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

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

<math>\frac{2^m\,a}{2^n\,b}=2^{m-n}\frac ab</math>

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

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

相對較慢的算法[編輯]

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

在第 <math>i</math> 步迭代中,餘數更新公式為:

<math>R_i=B\times R_{i-1}-Q_{n-i}\times b</math>

若當前餘數 <math>R_{i-1}</math> 左移後大於等於除數 <math>b</math> ,則商位 <math>Q_{n-i}=1</math> ,更新餘數

<math>R_i=2\times R_{i-1}-b</math>

若結果為負,則商位 <math>Q_{n-i}=0</math> ,需恢復餘數

<math>R_i=2\times R_{i-1}+b</math>(通過加回除數實現)

此算法下,原始版本偽代碼如下:

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

最佳化版本偽代碼如下:

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,通過​​商位符號擴展​​避免餘數恢復步驟。

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

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算法,一種通過​​商位查找表​​的非恢復方法。

相對更快的算法[編輯]

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

<math>x_i = x_{i - 1} - \frac{f_b(x_{i - 1})}{f'_b(x_{i - 1})}</math>

其中,函數 <math>f_b(x) = 0</math> 的零點即為 <math>1/b</math>。迭代公式可簡化為:

<math>x_i = x_{i-1} + x_{i-1} (1-b x_{i-1})</math>

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

<math>x_0 = \frac{48}{17} - \frac{32}{17}b\ (\simeq 2 · 82 - 1,88 b)</math>

其中係數 <math>48/17</math> 和 <math>32/17</math> 已預先存儲為常數。

牛頓-拉夫森法具有​​二次收斂性​​,誤差隨迭代次數指數級下降。對於 <math>p</math> 位精度,所需迭代次數為:

<math>s = \log_2 \left ( \frac{p + 1}{\log_2 17} \right )</math>

欲求單精度浮點數(24位尾數),需要約3次迭代;欲求雙精度浮點數(53位尾數),則需約4次迭代。

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

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

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

<math>F_k=f_k\times f_{k-1}\times \ldots f_1 =\prod(f_i) </math>

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

<math>b_k=F_k \times b \Longrightarrow 1</math>。

整除[編輯]

File:Cuisenaire ten.JPG
使用實物展示10如何被2和5整除

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

<math>a \div b = q \dots 0</math>

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

表示方法[編輯]

<math>b \mid a</math>表示<math>b</math>整除<math>a</math>,即<math>a</math>是<math>b</math>的倍數,<math>b</math>是<math>a</math>的因數

舉例[編輯]

<math>15</math>可以被<math>5</math>整除,記作<math>5 \mid 15</math>。

<math>20</math>不能被<math>6</math>整除(因為餘數為<math>2</math>),記作<math>6 \nmid 20</math>。在<math>\mid</math>上加一條斜線即表示不整除。

運算方法[編輯]

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

算盤也可以做除法運算。

長除法[編輯]

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

使用長除法計算<math>{ {1260257}\div {37} } = 34061 </math>的過程可以表示為:

File:LongDivisionAnimated.gif
<math>1260257 \div 37</math>的演算過程
<math>

\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} </math>

短除法[編輯]

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

  • 使用短除法計算<math>3 \div 7</math>的近似值:
<math>

\begin{array}{r} 7 \ | \! \underline{\, \ 3.00000000000000000 \dots \ } \\ 0.42857142857142857 \dots \ \end{array} </math>

<math>

\begin{array}{r} 2 \ | \! \underline{\, \ \ \ 420 \ } \\ 2 \ | \! \underline{\, \ \ 210 \ } \\ 3 \ | \! \underline{\, \ 105 \ } \\ 5 \ | \! \underline{\, \ 35 \ } \\ 7 \ \end{array} </math>

<math>420 = 2^2 \times 3 \times 5 \times 7</math>
<math>

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

<math>

\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} </math>

尺規作圖法[編輯]

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

一種方法是作圓法。

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

以下僅針對<math>a<b</math> 的情況(圖1)說明構造步驟(至於 <math>a>b</math> 的情況,見圖2):

File:01 Division-a-b 1.svg
圖1
<math>a<b</math> 時的尺規作圖構造
File:01 Division-a-b 2.svg
圖2
<math>a>b</math> 時的尺規作圖構造
  1. 數軸上,將長度 <math>a</math> 和 <math>b</math> 的兩條共線線段分別標記為線段 <math>\overline{DS}</math> 和 <math>\overline{SB}</math> ;
  2. 過點 <math>S</math> 作 <math>\overline{DB}</math> 的垂線,並作一條與 <math>\overline{DB}</math> 距離為1的平行線,兩線交於 <math>C</math> 。為確定過點 <math>C</math> 的 <math>k_b</math> 的圓心 <math>M</math> ,需作 <math>\overline{DC}</math> 和 <math>\overline{CB}</math> 的兩條中垂線(圖中未畫出);
  3. 繪製弧 <math>\mathrm{arc}\; MBD</math> ,其與另一輔助線交於點 <math>E</math> ;
  4. 連接點 <math>D</math> 和 <math>E</math> ,該連線與過 <math>C</math> 作的垂線交於 <math>C'</math> ;
  5. 從點 <math>B</math> 出發,作過 <math>E</math> 的射線,直至其與過 <math>C</math> 作的垂線交於 <math>C</math> 。

至此,構造基本完成。為避免出現重疊, <math>\overline{FD}</math> 與 <math>\overline{CS}</math> 的長度關係需單獨說明。

對圖1的證明

在以 <math>M'</math> 為圓心的圓 <math>k_2</math> 中應用弦定理可得:

<math>\overline{A'S} \cdot \overline{C'S} = \overline{BS} \cdot \overline{DS} \Rightarrow </math>
<math>a:b = \overline{C'S} = \frac{\overline{BS}\cdot\overline{DS}}{\overline{A'S}}.</math>

在以 <math>M</math> 為圓心的圓 <math>k_3</math> 中應用弦定理可得:

<math>\overline{AS} \cdot \overline{CS} = \overline{BS} \cdot \overline{DS} \Rightarrow </math>
<math>b:a = \overline{CS} = \overline{FD} = \frac{\overline{BS}\cdot\overline{DS}}{\overline{AS}}.</math>

另一種方法是利用截線定理,用尺規作全等三角形。(圖3)具體步驟如下:

File:Number construction division.svg
圖3
<math>a / b</math> 時的尺規作圖構造
  1. 自點 <math>A</math> 引出第一條射線;
  2. 在該射線上,以 <math>A</math> 為起點,先截取長度為 <math>1</math> 的線段 <math>\overline{AE}</math> ,再截取長度為 <math>b</math> 的線段 <math>\overline{AB}</math> ;
  3. 自點 <math>B</math> 出發,在與 <math>\overline{AB}</math> 成任意角 <math>\alpha</math> 的方向上截取長度為 <math>a</math> 的線段 <math>\overline{BD}</math> ;
  4. 過點 <math>D</math> 作自點 <math>A</math> 引出的第二條射線;
  5. 自點 <math>E</math> 作與 <math>\overline{BD}</math> 平行的直線,該直線與第二條射線的交點 <math>C</math> 所對應的線段 <math>\overline{EC}</math> 即為所求商 <math>\frac{a}{b}</math> 的長度。

關於「除以零」[編輯]

「除以零」有意義嗎?[編輯]

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

1 : 0 是否等於?[編輯]

File:1overx.svg
<math>y = \tfrac{1}{x}</math>在平面直角坐標系上的函數圖象

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

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

  • 傳統算術運算規則失效(如 <math>-</math> 未定義)
  • 出現大量不定式(如<math>1 : 0</math>型表達式)
  • 需另外建立特殊處理法則

其次,通過極限理論,在x=0處,函數 <math>\tfrac{1}{x}</math> 同時具有正負兩個方向的發散趨勢:

  • 右極限:<math>\lim_{x\to +0} \tfrac{1}{x} = +\infty.</math>
  • 左極限:<math>\lim_{x\to -0} \tfrac{1}{x} = -\infty.</math>

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

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

最後,直接承認方程 <math>0 \cdot x = 1</math> 無解具有顯著優勢:

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

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

參見[編輯]

參考資料[編輯]

  1. ^ 6. Writing Systems and Punctuation (PDF). The Unicode® Standard: Version 10.0 – Core Specification. Unicode Consortium. June 2017: 280, Obelus [2025-07-29]. (原始內容存檔 (PDF)於2021-10-04). 
  2. ^ 引用錯誤:沒有為名為Cajori的參考文獻提供內容
  3. ^ Smith, David Eugene. History Of Mathematics Vol II. Ginn And Company. 1925. 
  4. ^ http://mathworld.wolfram.com/DivisionbyZero.html 互聯網檔案館存檔,存檔日期2018-10-23. Retrieved October 23, 2018