对数是怎么被发明的?
先提一个问题:
10,000*1,000等于多少?
如果不是太蠢的话(XD),我相信大家都不会这样算:

简单地数一下0的个数,两个数字10000, 1000分别是4个0和3个0。所以答案就是一个拥有4+3=7个零的一个数,即10,000,000。
在这样的简化计算过程中,我们实际上就在不知不觉中采用了对数计算方法。
最初发明对数计算方法的人,就是想到了可以创造出一种新的计算乘法和除法的方式,将它们转换成加法和减法:
log(ab)=log(a)+log(b)\log(ab) = \log(a) + \log(b)log(ab)=log(a)−log(b)\log(\frac{a}{b})=\log(a)-\log(b)
就这两个等式,给数学家们省下了多少时间和生命!
我们举个使用对数公式和对数表简化计算的例子:
假设 x=567.89×3141.59x=567.89×3141.59 ,
两边同时取以10为底的对数,得到:
log(x)=log(567.89×3141.59)=log(567.89)+log(3141.59)=log(102×5.6789)+log(103×3.14159)=2+log(5.6789)+3+log(3.14159)=5+log(5.6789)+log(3.14159)\begin{aligned} &&\log(x)=&\log(567.89×3141.59)& \\ & &= & \log(567.89)+\log(3141.59)& \\ & &=&\log(10^2×5.6789)+\log(10^3×3.14159)& \\ & &=&2+\log(5.6789)+3+\log(3.14159)& \\ & &=&5+\log(5.6789)+\log(3.14159)& \end{aligned}
以四位对数表为例,对数表提供 log1.0000\log 1.0000 至 log9.9999\log 9.9999 的值,
查表可得 log(5.6789)=0.7543\log(5.6789) = 0.7543 和 log(3.14159)=0.4971\log(3.14159) = 0.4971 。
所以log(x)=5+0.7543+0.4971=6.2514\log(x) = 5+0.7543+0.4971 = 6.2514 ,两边取指数得x=106.2514=106×100.2514x = 10^{6.2514} = 10^6 \times 10^{0.2514} 。
根据对数表反查可得100.2514=1.784010^{0.2514} = 1.7840
所以用对数表计算可得 x=1784000x = 1784000,相比于直接计算567.89×3141.59=1784077.5451567.89×3141.59 = 1784077.5451 ,误差约为0.004%。
更一般地,对两个任意大数乘积 x1x2x_1 x_2,令 x1=a1∗10n1,x2=a2∗10n2,1≤a1,a2≤10x_1 = a_1 * 10^{n_1}, x_2 = a_2 * 10^{n_2}, 1\leq a_1, a_2 \leq 10,有
log(x1x2)=log(10n1a1×10n2a2)=n1+n2+log(a1)+log(a2) \log(x_1 x_2) = \log(10^{n_1}a_1 \times 10^{n_2}a_2 ) =n_1+ n_2 + \log(a_1) + \log(a_2)
将 a1,a2a_1,a_2 的值四舍五入到最近的四位小数,查对数表log(a1),log(a2)\log(a_1),\log(a_2) 可得 log(x1x2)\log(x_1x_2) ,两边取指数有x1x2=10n1+n2+log(a1)+log(a2)x_1x_2 = 10^{n_1+n_2+ \log(a_1) + log(a_2)} ,将指数部分拆分为整数和 [0,1)[0,1) 的小数部分,再使用反查表求小数部分的指数函数值,即可得到 x1x2x_1x_2 的值。
整个计算过程中,我们只查两次对数表,进行一次加法运算,再反查一次对数表,就能得到两个大数乘积的值,这就可以大幅度简化大数的乘除法运算,提高运算速度。
再来个天文学领域计算的例子,有人说上面的例子太简单(XD),那我们这次用真的数据:
假设地球以圆形轨道绕太阳运动,根据以下已知数据,计算太阳的质量:
地球与太阳的平均距离 R=1.496×1011mR = 1.496 \times 10^{11} m地球公转周期 T=3.156×107sT = 3.156 \times 10^7 s万有引力常数 G=6.672×10−11m3/(s2⋅kg)G = 6.672 \times 10^{-11} m^3/(s^2 \cdot kg)根据万有引力定律和牛顿运动定律可知:
M=4π2R3GT2M = \frac{4\pi^2R^3}{GT^2}
不用计算器,使用对数表只要做加法、减法和简单的乘法就能求出这个表达式,所有的对数值都可以由查表得到。当时的天文学家是这样计算的:
log(2π)=0.7982log(4π2)=2log(2π)=1.5964log(G)=−11+0.8242log(T)=7+0.4991+log(T)=7+0.4991log(GT2)=4.8224log(R)=11+0.1750×3log(R3)=33.5250+log(4π2)=1.5964−log(GT2)=4.8224log(M)=30.2990M=100.2990×1030=1.991×1030\begin {array} {r@{{}={}}r} {{}{}} \ & & \log(2\pi) &=& 0.7982 \\ & \log(4\pi^2) &=2\log(2\pi) & = & 1.5964 \\ \\ & & \log(G) &= & - 11 + 0.8242 & \\ & & \log(T) &= & 7 + 0.4991 & \\ &+ & \log(T) &= & 7 + 0.4991 & \\ \hline & & \log(GT^2)& = & 4.8224 \\ \\ \\ & & \log(R)& = & 11 + 0.1750 \\ &\times & & & 3 & \\ \hline & & \log(R^3) & = & 33.5250 & \\ & + &\log(4\pi^2) & = & 1.5964 \\ &- & \log(GT^2) & = & 4.8224 & \\ \hline & & \log(M) & = &30.2990 & \\ \\ & & M & = & 10^{0.2990} \times 10 ^ {30} \\ & & & = & 1.991 \times 10^{30} \\ \end {array}
如果按照传统方法计算,需要7个大数乘法竖式和1个除法竖式。这种算法只要一个「对数竖式」,就能取代所有的大数乘法和除法,通过简单的加减大幅度简化了运算过程。
计算所得结果为:太阳质量是 1.991×1030kg1.991 \times 10^{30} kg 。查有关资料可知,准确值为 (1.98855±0.00025)×1030kg(1.98855 \pm 0.00025) \times 10^{30} kg ,所以上述计算的相对误差为0.09%0.09\% 。
由此看出,通过对数表进行大数计算,得到的是有误差的数,不是真值,除非是那种数零就可以计算的大数。但对于许多工程计算、甚至科学计算来说,这种精度已经足够。
发明对数计算,都是因为没有计算器可用给逼出来的。
17世纪初,在工程实践、天文观察等行业和科学研究领域中,人们开始遇到越来越多的大数字,这些大数字还需要通过复杂的乘除运算才能拿来用,所以迫切的需要一种提高计算效率的方法,于是对数和对数表就这样应时而生了。通过上面的对数公式,很容易地就把乘除法转换成了加减法,从此就不用列乘法竖式和除法竖式了。
对数有独一无二的功能:化乘除为加减,化乘方开方为乘除,将高级运算降为次级运算。当时有一种说法:对数的发明让天文学家的寿命增加了一倍。

第一张对数表是瑞士工程师比尔吉(Jost Bürgi, 1552-1632)制作的,他曾经担任过著名天文学家开普勒的助手,这一工作干的主要任务就是计算天体运行的数值,大概实在是算得头晕眼花了吧,比尔吉产生了化简数值计算的想法,搞出了他自己用的对数和对数表。在完全独立的情况下,苏格兰数学家约翰·纳皮尔男爵(John Napier)发明了现在大家用的对数规则。如今一般都承认他们两人都是对数先驱。

思考题:那么对数表是怎么发明的?
提示:要发明对数表,只要求出从 log(1.0001)\log(1.0001) 到 log(9.9999)\log(9.9999) 的四位小数的值。那么,什么方法能够计算出从 log(1.0001)\log(1.0001) 到 log(9.9999)\log(9.9999) 的所有值呢?
(评论区有大佬给出了思路)
我给了其中一种解法,也是当时比尔吉和纳皮尔计算第一张对数表时采用的方法。请移步下面的问题。 我会尽快更新。 : )