算术方法续谈

我一直用一个简单的近似公式来估算一个数的平方根: \[\sqrt{n^2+d} \approx n + \frac{d}{2n}.\]

例如我想估算10的算术平方根,心中默想\(10=3^2+1\),于是\(\sqrt{10}\approx 3+\frac{1}{6} = 3.167\)。这个方法非常简单有效。

我不知道以前的算术课程是否要讲授笔算开方的方法。反正自从电子计算器普及,这些技术就无人问津了。有一种竖式方法可以用来做任意位数的开方运算,如下图所示:

方法是,将被开方数以小数点为基准,每两位分为一段,每段将要对应结果中的一位。接下来列一个类似除法的竖式。略有不同的是,除数是不定的。确定除数的方法如下:将现有的商数(即第一行的数值,不计小数点)乘以20,写在最左边一栏,这时候,末尾的一位0暂时不要写,用下划线代替。确定好除数以后,进行试商,即取一个0~9的数字,填在下划线上,然后将除数和这个数相乘。如果恰好最接近被除数但不超过,就确定了这位商数,可以写在第一行相应的位置上。试商的时候,可以先利用高位的数字进行估算,然后填上下划线上数字,进行具体的计算。接下来的运算和除法类似:计算余数,然后从被开方数中补上一段,构成新的被除数。

这种算法式的描述并没有讲明白这个运算的原理。这个计算方法有一个优点就是可以无限地进行下去,缺点则是算式中数字的位数会越来越大,计算也就会越来越困难。

由上面的算式可知,\(\sqrt{10}\approx 3.1622777\),前面提到的估算方法的误差大约为0.1%,精度很不错了,而且省了大量的脑力。

如果手头有平方数表,那么开方自然是一件不费力的事。要获得较多的有效数字,除了竖式笔算以外,通常需要借助较为精密的对数表。我偶然看到了一本1970年的《简便八位对数表》,它的计算方法非常精妙,使得对数表本身可以精简,而且精度也足够。对此我感到耳目一新。只是可惜那个年代已应是计算机大行其道的时候了,即便研究出再巧妙的手工计算方法,意义真的不大。

使用对数表开方的原理为下述恒等式:\(\lg\sqrt{x} = \frac{1}{2}\lg x\)。例如,10的对数(碰巧)是1,那么它的算术平方根的对数就是0.5。我们只需在对数表中找出0.5对应的真数即可。用那本《简便八位对数表》做例子1,经过一系列的计算将得到\(\lg\sqrt{10} = 0.5 = \lg 3.16227766\),和竖式方法的结果是一致的。

如果不是要开平方而是要开立方,那也很容易通过对数表来完成。以一般的四位对数表为例,只要查0.3333对应的真数即可。很容易查到答案为2.155,用计算器验算可知误差为0.02%。如用八位对数表,则很容易得到8位有效数字。另一方面,如果要用竖式的方法开立方,那么计算将是相当繁琐的。

作为对这种神奇的技术的致敬,我花了几个小时的时间对《简便八位对数表》做了“数码重制”,并且印制成了A5大小的小册子。


  1. 事实上我还没找到其他的八位对数表的原本,不知道它们是怎样编排的。(据我所知有几百页厚。) ↩︎


分享