四则运算与 i 的幂
复数的四则运算只有一条新规则:。其余照多项式运算做,把 当字母处理,遇到 就换成 。本页依次给出四种运算的形式与几何对应,并交代除法为何要先给分母乘上共轭。
1 · 加减法与向量的对应
加减法逐部进行:
这与向量按坐标相加减是同一个式子,故复平面上 落在以 、 为邻边的平行四边形的第四个顶点上, 则对应从 指向 的那条向量,它与从原点出发的 平行且等长。差的这条对应关系是几何应用的入口:两点间的距离就是 (见 模与距离给出的轨迹 §3)。
2 · 乘法的展开式与极坐标路径
按分配律展开再用 收拢:
同一个乘法还有另一条算路:模相乘、辐角相加(见 三角形式与乘法的旋转 §2)。两条路径在数学上是同一个函数,在浮点下不是同一串位。
的展开式给
,极坐标路径给的实部是 -6.9999999999999964。20 万组随机取值(实部与虚部都落在
到
之间)下,两条路径的绝对偏差最大 8.53e-14、相对偏差最大 9.47e-16,即几个 ulp 的量级。
这个量级恰好使两条路径互为对照:核心模块的单测拿它们互验,谁都不是「把被测公式抄一遍」。若某天展开式写错一个符号,随机取值下的偏差会立刻从 1e-16 跳到 1e0 量级,而不是悄悄通过。
3 · i 的幂的周期
、、、,此后循环。指数除以 的余数决定值,四个连续幂之和恒为零:。这条常用来一口气消掉长求和里的大部分项。
实现按余数查表,而不用
与
。后者从
起就不精确:Math.cos(Math.PI / 2) 是 6.123233995736766e-17 而非 0,到
时虚部的偏差已是 -4.898587196589413e-16,误差随
线性累积。查表则逐个精确,且负指数也走同一张表:(n % 4 + 4) % 4 把 JS 的余数符号归一之后,
与
落到同一格。
注 · 用重复相乘算
的幂同样精确,但会带出一个负零:
由
得到,实部是
,在 IEEE 754 下是 -0。查表给的是 +0。单测里用 toEqual 深比较这两个结果会失败,改按差值比对才通过——判等的坑不在虚部,在那个看不见的符号位。
4 · 除法与分母实数化
除法的目标是把结果写回 的形式,而分母带 时办不到。给分子分母同乘分母的共轭,分母变成实数 :
这一步叫分母实数化,与实数里根式分母有理化是同一个套路。
例 4.1 计算 。分子分母同乘 :分子 ,分母 ,故商为 。
另一条算路是先求倒数
再相乘。它与分母实数化的差别只在做除法的时机,20 万组随机取值下最大相对偏差 2.70e-16。落到例 4.1 这个数上,分母实数化给的虚部是 -0.4,乘倒数给 -0.40000000000000013——=== -0.4
一条为真一条为假。两条路径同样在单测里互验,另加一条闭合检验:商乘回除数应得被除数。
零仍然不能作除数,也没有倒数。实现在
时返回空值,而不是让 Infinity 流进后续计算——一旦流出去,画板上得到的是 NaN 坐标,报错点离病因很远。
5 · 共轭的运算律
共轭与四则运算可交换次序:
三条都由定义直接展开可得,单测也就按定义展开去验,而不是引用另一条公式。另有两个常用等式: 是实数,。前者是分母实数化那一步的实质,后者常用来把「实部为某值」的条件写成不含实部记号的形式。
6 · 参考文献
- Complex number. Wikipedia. 四则运算的定义与运算律。https://en.wikipedia.org/wiki/Complex_number
- Complex conjugate. Wikipedia. 共轭的运算律与它在除法里的用处。https://en.wikipedia.org/wiki/Complex_conjugate
- Complex Multiplication. Wolfram MathWorld. 乘法的展开式与极坐标写法。https://mathworld.wolfram.com/ComplexMultiplication.html
- Imaginary unit. Wikipedia. i 的幂的周期。https://en.wikipedia.org/wiki/Imaginary_unit