除法

维基百科,自由的百科全书
(重定向自
跳转到导航 跳转到搜索
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

Module:Authority_control第183行Lua错误:attempt to index field 'wikibase' (a nil value)