有积求方——中国古代开方的第一课
今有积二十三万四千五百六十七步,问为方几何?答曰四百八十四步九百六十八分步之三百一十一。这道题开启了中国古代最重要的算法之一——开方。术文里「借一算为下法,步之超一位至百而止」十四个字,写的是最古老的试商定位法;而答案末尾那个九百六十八分之三百一十一,是古人处理「开不尽」的方式。
原典
今有积,二十三万四千五百六十七步。问:为方几何?
答曰:四百八十四步九百六十八分步之三百一十一。
术曰:置积二十三万四千五百六十七步,为实,次借一算为下法,步之超一位至百而止。上商置四百于实之上,副置四万于实之下。下法之上,名为方法,命上商四百除实,除讫,倍方法,方法一退,下法再退,复置上商八十以次前商,副置八百于方法之下。下法之上,名为廉法,方廉各命上商八十以除实,除讫,倍廉法,上与方法俱再退。下法之上,复置上商四,副置四于方法之下。下法之上,名曰隅法,方廉隅各命上商四以除实,除讫。其逅有不尽者,以法命之。
白话翻译
有一块正方形田地,面积是二十三万四千五百六十七平方步。问它的边长是多少?
答案是:四百八十四步,再加九百六十八分之三百一十一步。
术文给的算法是:把面积作为「实」(被开方数),借一枚算筹作为「下法」,让它每超一位就退一级,退到「百」位为止。然后上商「四百」——在实的上方写四百,在实的下方写四万(四倍的百位)。此时下法上方那枚算筹叫「方法」,用它配上商四百去减实。减完,把方法翻倍,方法退一位、下法退两位;再上商「八十」,在方法下方写八百,此时下法上方叫「廉法」;方法与廉法各配八十去减实,减完,廉法翻倍,方法与廉法再退。最后下法上方上商「四」,方法下方写四,此时下法上方叫「隅法」;方、廉、隅三法各配四去减实。减完,如果还有剩余,就用法把它表示成一个分数。
这段话极难读,因为它描述的是筹算的算筹摆放,而不是纸笔算式。 但它的数学内核非常清晰,而且我们今天还在用。
示意图
古人的算法
先看结果对不对。
而实是 234567,差
所以边长比 484 多出一小块,答案写成 。
为什么不写成 ? 因为古人不会用小数,他们用分数。而分母 968 不是随手取的,它有明确来历:
即边长近似值的二倍。这正是线性近似:若边长增加 ,面积增加约 ,所以
古人在没有微分学的时代,用「倍方法」这一步,准确抓住了面积变化的线性主项。 这就是术文为什么要「倍方法」——翻倍后的方法,正是 。
用今天的知识看,这个近似之所以好用,是因为当余数(311)远小于 (234256)时,二次项 可以忽略。实际验算:
误差只有 0.1,相对误差不到十万分之一。
现代数学视角
什么是开方:给定面积 ,求边长 使 。今天写成 。本题 ,与古法 一致。
术文的「三层试商」:把待求数按位拆分,先定百位、再定十位、最后是个位,每一步都用面积减去已确定部分的贡献。这正是今天手算开平方的逐位试商法,也是计算机二分法、牛顿法求平方根之前,人类用了一千五百年的标准算法。
「借一算为下法,步之超一位至百而止」:这一步是定位。被开方数是六位数,它的平方根应是三位数——古人用一根算筹从个位起,每跨过两位退一级,退到百位,就知道最高位是百位。这个定位技巧避免了盲目试商。《九章算术·少广》chapter 专门讲开方,本题是它的标准范例。
误差分析的雏形:答案末尾的 说明古人刻意保留了「开不尽」的部分,而不是取整了事。他们甚至通过「倍方法」得到了正确的误差阶——这不是偶然,是长期算学实践总结出来的经验法则。可以说,这是中国古代对「近似计算精度」最早的自觉处理之一。
高中课本关联
平方根与算术平方根: 的定义与近似计算。本题展示了如何手算到任意精度——把分数分母继续放大,就能得到更准的结果。
函数与迭代: 的反函数。已知函数值求自变量,是反函数思想的朴素体现。今天学生学「已知 ,,求 」,与本题是同一件事。
线性近似与微分:。本题的「倍方法」就是 。把这条线索从《九章算术》讲到导数,「以直代曲」的思想脉络就完整了。
估计与验算:、,所以答案在 484 与 485 之间。这种「夹逼」思路今天依然常用——估根号、估增长率、估误差范围。
思考与拓展
-
算一算:验算 ,并算余数 。再用 复现答案的分母 968。
-
夹逼:只用 与 两个数,说明 落在 484 与 485 之间。它离哪一端更近?
-
提高精度:古人只取了一次线性近似。若再做一次(用 修正),误差能降到多少?这近似牛顿迭代法。
-
定位练习:若积是 23 456 700(大十倍),边长约多少?若积是 2345.67(小百倍),边长约多少?总结「面积每变 100 倍,边长变几倍」。
-
反向出题:自己编一道「有积求方」:取一个三位数如 517,平方得 267289,把 267289 作为积,请同学用夹逼法估算边长,再用线性近似给出分数形式的精确值。
一句话总结
把一根算筹从个位退到百位,再试商四百、八十、四——两千年前的分层试商,与今天手算平方根用的是同一套算法。