自十八、九岁学习了对数后,就觉得造对数表真不简单。据说十七世纪那时,说如果谁发现了对数表上有一个数字错,就奖一两黄金。
据百科百度:纳皮尔(1550~1617年),苏格兰数学家,对数的创始人。他的最大贡献是发明了对数。纳皮尔的杰作《奇妙的对数定律说明书》于1614年6月在爱丁堡出版。纳皮尔的朋友,英国人布里格斯,将纳皮尔创立的对数改为常用对数,它才得到广泛使用。并在1624年出版了《对数算术》,公布了以10为底包含1—20000及90000—100000的14位常用对数表。
1671年,著名的德国数学家莱布尼兹(G.W.Leibnitz)制成了第一台能够进行加、减、乘、除四则运算的机械式计算机。
可见,布里格斯编算常用对数表时,机械式计算机还未发明,看来只能是手算了。
我那时不知道十七世纪是怎样编算对数表的。但我还是想自己亲手来编一份,那怕为数很少也可以,只想弄明白,对数表是怎样编算的。这一心愿几十年来一直没有了结。
想起二十世纪五六十年代,对数表不能离手,少了它就无法工作,真不胜感慨。当70年代用上了飞鱼牌手摇计算机后,就告别了六位对数表。当80年代用上了电子计算器后,又告别了八位函数表和手摇计算机。在电脑已普及的今天,我仍有用手算方法来造对数表的想法,这似乎有点可笑,但“怎样造原始的对数表”的问题,仍牵引着我的心,一直想了此一事。
想不到年老了,竟灵光一闪,得到了一个造表方法,并且可以分配到许多人,各自独立计算不同的数值范围,最后汇集于一起,成为一本对数表,这样就可以较快完成,不必化几年、乃至几十年时间了。
所谓常用对数,就是以10为底时,有方程10^D=Z。如果知道一个数Z (叫真数),则10的指数就是D, D就叫十进对数,也叫常用对数。给出Z,求D。 并以D = Lg Z表示之。例如10^D=2,给出2,求D。 并以D = Lg2表示之。查对数表可得D = Lg2=0.30103,即10^0.30103 = 2 。亦即10的0.30103次方等于2。
10的整数次乘方可以算,可是0.30103次方怎么算呢?真是无法理解。但如果说,因为0.30103=30103/100000,那末先算10的30103的次方,再开100000次方,倒是有道理的,但2的对数是0.30103,决不可能是这样算的,所以仍很玄。那么2的对数是0.30103,到底是怎样算出来的呢?
这么一想就有一个启发,就是10的零点几次方,可以这样算:先乘方、再开方,而主要是开方。例如10的开平方,就是10的0.5次方。10的开3方,就是10的0.33333次方等等。受此启发,经反复试算,得到编算常用对数表的步骤和方法:
$1先求最基础的对数
1、我想,世界上第一个常用对数,可能就是3.162 27766的对数0.5。因为3.16227766 = √10
= 10^(1/2)= 10^0.5,而0.5就是它的对数。10的开方,用笔算可以一次开出,也可以用逐步试算趋近。如先用3.16*3.16=9.9856,不够,再用3.163*3.163=10.004569,超过了一点,再用
3.16228*3.16228=10.0000147984…最后定为3.16227766。也就是说3.16227766的对数为0.500000。
2、第二个,可能就是2.15443469的对数为0.333333了。因为2.15443469= 3√10 =10^(1/3)
= 10^0.33333,而0.3333333就是它的对数。10的开3方比较麻烦,可以逐步试算趋近。如先用2.15*2.15*2.15 =9.9384,不够,再用2.1544*2.1544*2.1544 =9.99952,还不够,再试,最后定为2.15443469。也就是说2.15443469的对数为0.333333。
33.16227766的对数为0.500000。2.15443469的对数为0.333333…这样的对数,我称它们为最基础的对数。最基础的对数需要多少个呢?这里仅算出8个,我想也许够了。即只要计算:
10的1/2次方,亦即10的开2次方。注意2是素数。
10的1/3次方,亦即10的开3次方。注意3是素数。
10的1/5次方,亦即10的开5次方。注意5是素数。
10的1/7次方,亦即10的开7次方。注意7是素数。
10的1/11次方,亦即10的开11次方。注意11是素数。
10的1/13次方,亦即10的开13次方。注意13是素数。
10的1/17次方,亦即10的开17次方。注意17是素数。
10的1/19次方,亦即10的开19次方。注意19是素数。
就可以得到相应的对数。用这些最基础对数,再去拓展其他的对数。计算这些最基础对数,只要用开方就可以了。开方虽然很烦,特别是开7次方以上时,要逐步、反覆连乘7次以上来校核改进,的确很烦,但毕竟是可以用手工算得出来的。我想,在十七世纪时,也只能这样硬算了。
4、 而10的开4次方, 10的开6次方,10的开15次方…就不必了,因为它们可以根据上述最基础的对数,就能方便算出的,不必白费力气了。
由 10 的 开 D 次方 所 得 的 《基 础对 数 表》 | ||||
10的开 D次方 | 最基础的真数Z | 相应的对数D | 即10的指数D | |
2√10= | 3.162277660 | 0.500000 | D=1/2 | |
3√10= | 2.154434690 | 0.333333 | D=1/3 | |
5√10= | 1.584893192 | 0.200000 | D=1/5 | |
7√10= | 1.389495494 | 0.142857 | D=1/7 | |
11√10= | 1.232846739 | 0.090909 | D=1/11 | |
13√10= | 1.193776642 | 0.076923 | D=1/13 | |
17√10= | 1.145047570 | 0.058824 | D=1/17 | |
19√10= | 1.128837892 | 0.052632 | D=1/19 |
$2 基 础 对 数表 扩 充
有了上面的最基础的对数之后,就根据对数基本原理:真数相乘除,对数便加减的方法,可将最基础的对数扩充。例如:
1(2√10)*(5√10) = 3.162277660*1.584893192=5.01187
相应之对数为:0.500000+0.200000=0.70000
2(2√10)/(5√10) = 3.162277660/1.584893192=1.99526
相应之对数为:0.500000-0.200000=0.30000
3这样,扩充后的对数,共96个,见下表:
基 础 对 数 扩 充 表 | |||
由最基础的真数和对数,经真数乘除、对数加减而得 |
真数 | 对数 | 真数 | 对数 | 真数 | 对数 |
1.00546 | 0.00236 | 1.55052 | 0.19048 | 3.89860 | 0.59091 |
1.00557 | 0.00241 | 1.56852 | 0.19549 | 4.39397 | 0.64286 |
1.00874 | 0.00378 | 1.58489 | 0.20000 | 4.64159 | 0.66667 |
1.00952 | 0.00411 | 1.59104 | 0.20168 | 5.01187 | 0.70000 |
1.01436 | 0.00619 | 1.65875 | 0.21978 | 5.23960 | 0.71930 |
1.01811 | 0.00779 | 1.71303 | 0.23376 | 5.54100 | 0.74359 |
1.03273 | 0.01399 | 1.74753 | 0.24242 | 5.72240 | 0.75758 |
1.04256 | 0.01810 | 1.78909 | 0.25263 | 6.44950 | 0.80953 |
1.05753 | 0.02429 | 1.80472 | 0.25641 | 6.81290 | 0.83333 |
1.07668 | 0.03209 | 1.81478 | 0.25882 | 7.22480 | 0.85883 |
1.09214 | 0.03828 | 1.89201 | 0.27692 | 7.35640 | 0.86667 |
1.12706 | 0.05195 | 1.90854 | 0.28070 | 7.53220 | 0.87692 |
1.12884 | 0.05263 | 1.93070 | 0.28571 | 7.77870 | 0.89091 |
1.14062 | 0.05714 | 1.95393 | 0.29091 | 8.12410 | 0.90978 |
1.14505 | 0.05882 | 1.99526 | 0.30000 | 8.24070 | 0.91596 |
1.16395 | 0.06593 | 2.15443 | 0.33333 | 8.59140 | 0.93406 |
1.19378 | 0.07692 | 2.20220 | 0.34286 | 8.76741 | 0.94287 |
1.23091 | 0.09023 | 2.27585 | 0.35714 | 8.87260 | 0.94805 |
1.23285 | 0.09091 | 2.43201 | 0.38597 | 9.15640 | 0.96172 |
1.28556 | 0.10909 | 2.46693 | 0.39216 | 9.28780 | 0.96791 |
1.31113 | 0.11765 | 2.51189 | 0.40000 | 9.45600 | 0.97571 |
1.32763 | 0.12308 | 2.56502 | 0.40909 | 9.59180 | 0.98190 |
1.35936 | 0.13333 | 2.57191 | 0.41026 | 9.68310 | 0.98601 |
1.36693 | 0.13575 | 2.64897 | 0.42308 | 9.85840 | 0.99381 |
1.38413 | 0.14118 | 2.76170 | 0.44118 | 9.85840 | 0.99381 |
1.38950 | 0.14286 | 2.80136 | 0.44737 | 9.85840 | 0.99381 |
1.39168 | 0.14354 | 2.99358 | 0.47619 | 9.85840 | 0.99381 |
1.40400 | 0.14737 | 3.16228 | 0.50000 | 9.85840 | 0.99381 |
1.41167 | 0.14973 | 3.41455 | 0.53333 | 9.85840 | 0.99381 |
1.42510 | 0.15385 | 3.56970 | 0.55263 | 9.85840 | 0.99381 |
1.46780 | 0.16667 | 3.62096 | 0.55882 | 9.85840 | 0.99381 |
1.47174 | 0.16783 | 3.77505 | 0.57692 | 9.85840 | 0.99381 |
当然,这个表很小,数量远远不够。但可以作基础,再通过多次交错乘除,得到更多的对数。但要想通过更多次交错乘除,得到全部对数,是不可能的,得另找出路。其实,只要设法先求出“素数的对数”,那就一劳永逸地解决问题了。这张《基础对数扩充表》就为下一步求“素数的对数”作了准备。
$3求素数的对数
大家知道,合数是素数的乘积。所以,只要知道素数的对数,就可以用乘除、加减法,算出合数的对数。于是任何数的对数,都可以算出。那末,素数的对数怎样求呢?
分两步:
第一,选择数据。在《对数扩充表》内,选择尽量靠近所求素数的两个数。例如,要算2的对数,表中仅有真数1.99526与2.20220其中1.99526离2很近,选中。而2.20220离2还远,我们就不用它,另找。方法是:仍利用上面的对数扩充表,找到1.95393与1.03273,两个数相乘,得:
1.95393*1.03273=2.01788,(离2很近了),选中。其相应对数为:
0.29091+0.01399=0.30490 。
这样,就取1.99526与2.01788两个数去内插,求2的对数。1.99526与2.01788这两个数,称做逼近值。
第二,内插。
真数对数
a= 1.99526A=0.30000
b= 2.01788B=0.30490求 Z=2 的对数。
在很小区间内(所求值百分之一、二的误差),采用线性内插公式
Lg Z = A+(B-A)/(b-a)*(Z-a)
计算得Lg 2 = 0.30103
这个方法只用到乘,除、加、减,所以可用手算。为减少工作量,最好多采用乘法去找逼近值、内插。
以下是 Lg 2、Lg 3、 Lg 5、Lg 7 、Lg41、Lg 43的计算过程:
数 据 准 备 中 的 真 数 和 对 数 ,来自 《基 础 对 数 扩 充 表》 | |||||||
| 代码式 | 真数 | 对数 | 代码式 | 真数 | 对数 | |
数据准备 | 1 | 1.99526 | 0.30000 | 2 | 1.95393 | 0.29091 | |
|
|
| 3 | 1.03273 | 0.01399 | ||
|
|
|
| 4=2*3 | 2.01788 | 0.30490 | |
| LgZ=A+(B-A)/(b-a)*(Z-a) | ||||||
内插 | 1 | a= 1.99526 | A=0.30000 | Z=2 | Lg 2=0.30103 | ||
| 4 | b= 2.01788 | B=0.30490 |
|
| ||
| 代码式 | 真数 | 对数 | 代码式 | 真数 | 对数 | |
数据准备 | 1 | 2.99358 | 0.47619 | 2 | 3.77505 | 0.57692 | |
|
|
|
| 3 | 1.23091 | 0.09023 | |
|
|
|
| 4=2/3 | 3.06688 | 0.48669 | |
|
|
|
| LgZ=A+(B-A)/(b-a)*(Z-a) | |||
内插 | 1 | a= 2.99358 | A=0.47619 | Z=3 | Lg 3=0.47711 | ||
| 4 | b= 3.06688 | B=0.48669 |
|
| ||
| 代码式 | 真数 | 对数 | 代码式 | 真数 | 对数 | |
数据准备 | 1 | 5.01187 | 0.70000 | 2 | 4.64159 | 0.66667 | |
|
|
|
| 3 | 1.05753 | 0.02429 | |
|
|
|
| 4=2*3 | 4.90862 | 0.69096 | |
| LgZ=A+(B-A)/(b-a)*(Z-a) | ||||||
内插 | 4 | a= 4.90862 | A=0.69096 | Z=5 | Lg 5=0.69896 | ||
| 1 | b= 5.01187 | B=0.70000 |
|
| ||
| 代码式 | 真数 | 对数 | 代码式 | 真数 | 对数 | |
数据准备 | 1 | 7.22480 | 0.85883 | 4 | 7.35640 | 0.86667 | |
| 2 | 1.03273 | 0.01399 | 5 | 1.04256 | 0.0181 | |
| 3=1/2 | 6.99583 | 0.84484 | 6=4/5 | 7.05609 | 0.84857 | |
| LgZ=A+(B-A)/(b-a)*(Z-a) | ||||||
内插 | 3 | a= 6.99583 | A=0.84484 | Z=7 | Lg 7=0.84510 | ||
| 6 | b= 7.05609 | B=0.84857 |
|
| ||
| 代码式 | 真数 | 对数 | 代码式 | 真数 | 对数 |
数据准备 | 1 | 5.23960 | 0.71930 | 4 | 9.28780 | 0.96791 |
| 2 | 1.27427 | 0.10526 | 5 | 2.27585 | 0.35714 |
| 3=1*2 | 4.11184 | 0.61404 | 6=4*5 | 4.08102 | 0.61077 |
|
|
| LgZ=A+(B-A)/(b-a)*(Z-a) | |||
内插 | 6 | a=4.08102 | A=0.61077 | Z=41 | Lg 41=0.61278 | |
| 3 | b=4.11184 | B=0.61404 |
|
|
|
| 代码式 | 真数 | 对数 | 代码式 | 真数 | 对数 |
数据准备 | 1 | 3.77505 | 0.57692 | 4 | 4.39397 | 0.64286 |
| 2 | 1.14062 | 0.05714 | 5 | 1.01811 | 0.00780 |
| 3=1*2 | 4.30590 | 0.63406 | 6=4/5 | 4.31582 | 0.63506 |
|
|
| LgZ=A+(B-A)/(b-a)*(Z-a) | |||
内插 | 3 | a=4.3059 | A=0.63406 | Z=43 | Lg 43=0.63347 | |
| 6 | b=4.31582 | B=0.63506 |
|
|
|
其他素数的对数,计算过程完全相同。以 下 是 100 以 内 25个 素 数 的 对 数
素数 | 对数 | 素数 | 对数 | 素数 | 对数 |
2 | 0.30103 | 29 | 1.46240 | 67 | 1.82607 |
3 | 0.47712 | 31 | 1.49136 | 71 | 1.85126 |
5 | 0.69897 | 37 | 1.56820 | 73 | 1.86332 |
7 | 0.84510 | 41 | 1.61278 | 79 | 1.89763 |
11 | 1.04139 | 43 | 1.63347 | 83 | 1.91908 |
13 | 1.11394 | 47 | 1.67210 | 89 | 1.94939 |
17 | 1.23045 | 53 | 1.72428 | 97 | 1.98677 |
19 | 1.27875 | 59 | 1.77085 | ||
23 | 1.36173 | 61 | 1.78533 |
$4求合数的对数
有了相当多的素数的对数后,合数的对数就很容易算了。方法如下:
合数= | 素数相乘 | 素数对数相加 | 合数的对数 | 合数 |
4= | 2*2 | 0.30103+0.30103= | 0.60206 | 4= |
6= | 2*3 | 0.30103+0.47712= | 0.77815 | 6= |
8= | 2*4 | 0.30103+0.60206= | 0.90309 | 8= |
9= | 3*3 | 0.47712+0.47712= | 0.95424 | 9= |
10= | 2*5 | 0.30103+0.69897= | 1.00000 | 10= |
12= | 3*4 | 0.47712+0.60206= | 1.07918 | 12= |
14= | 2*7 | 0.30103+0.84510= | 1.14613 | 14= |
15= | 3*5 | 0.47712+0.69897= | 1.17609 | 15= |
16= | 4*4 | 0.60206+0.60206= | 1.20412 | 16= |
18= | 3*6 | 0.47712+0.77815= | 1.25527 | 18= |
20= | 4*5 | 0.60206+0.69897= | 1.30103 | 20= |
21= | 3*7 | 0.47712+0.84510= | 1.32222 | 21= |
22= | 2*11 | 0.30103+1.04139= | 1.34242 | 22= |
24= | 4*6 | 0.60206+0.77815= | 1.38021 | 24= |
… | … | … | … | … |
96= | 3*4*8 | 0.47712+0.60206+0.90309= | 1.98227 | 96= |
98= | 2*7*7 | 0.30103+0.84510+0.84510= | 1.99123 | 98= |
99= | 3*3*11 | 0.47712+0.47712+1.04139= | 1.99563 | 99= |
… | … | … | … | … |
附:1 0 0 以内 的 十 四位 对 数 表
录自电脑,可与上述计算结果对比,看误差有多大。
N | Lg N | N | Lg N | N | Lg N |
1 | 0.00000000000000 | 34 | 1.53147891704226 | 67 | 1.82607480270083 |
2 | 0.30102999566398 | 35 | 1.54406804435028 | 68 | 1.83250891270624 |
3 | 0.47712125471966 | 36 | 1.55630250076729 | 69 | 1.83884909073726 |
4 | 0.60205999132796 | 37 | 1.56820172406699 | 70 | 1.84509804001426 |
5 | 0.69897000433602 | 38 | 1.57978359661681 | 71 | 1.85125834871908 |
6 | 0.77815125038364 | 39 | 1.59106460702650 | 72 | 1.85733249643127 |
7 | 0.84509804001426 | 40 | 1.60205999132796 | 73 | 1.86332286012046 |
8 | 0.90308998699194 | 41 | 1.61278385671974 | 74 | 1.86923171973098 |
9 | 0.95424250943933 | 42 | 1.62324929039790 | 75 | 1.87506126339170 |
10 | 1.00000000000000 | 43 | 1.63346845557959 | 76 | 1.88081359228079 |
11 | 1.04139268515823 | 44 | 1.64345267648619 | 77 | 1.88649072517248 |
12 | 1.07918124604762 | 45 | 1.65321251377534 | 78 | 1.89209460269048 |
13 | 1.11394335230684 | 46 | 1.66275783168157 | 79 | 1.89762709129044 |
14 | 1.14612803567824 | 47 | 1.67209785793572 | 80 | 1.90308998699194 |
15 | 1.17609125905568 | 48 | 1.68124123737559 | 81 | 1.90848501887865 |
16 | 1.20411998265592 | 49 | 1.69019608002851 | 82 | 1.91381385238372 |
17 | 1.23044892137827 | 50 | 1.69897000433602 | 83 | 1.91907809237607 |
18 | 1.25527250510331 | 51 | 1.70757017609794 | 84 | 1.92427928606188 |
19 | 1.27875360095283 | 52 | 1.71600334363480 | 85 | 1.92941892571429 |
20 | 1.30102999566398 | 53 | 1.72427586960079 | 86 | 1.93449845124357 |
21 | 1.32221929473392 | 54 | 1.73239375982297 | 87 | 1.93951925261862 |
22 | 1.34242268082221 | 55 | 1.74036268949424 | 88 | 1.94448267215017 |
23 | 1.36172783601759 | 56 | 1.74818802700620 | 89 | 1.94939000664491 |
24 | 1.38021124171161 | 57 | 1.75587485567249 | 90 | 1.95424250943932 |
25 | 1.39794000867204 | 58 | 1.76342799356294 | 91 | 1.95904139232109 |
26 | 1.41497334797082 | 59 | 1.77085201164214 | 92 | 1.96378782734556 |
27 | 1.43136376415899 | 60 | 1.77815125038364 | 93 | 1.96848294855394 |
28 | 1.44715803134222 | 61 | 1.78532983501077 | 94 | 1.97312785359970 |
29 | 1.46239799789896 | 62 | 1.79239168949825 | 95 | 1.97772360528885 |
30 | 1.47712125471966 | 63 | 1.79934054945358 | 96 | 1.98227123303957 |
31 | 1.49136169383427 | 64 | 1.80617997398389 | 97 | 1.98677173426624 |
32 | 1.50514997831991 | 65 | 1.81291335664286 | 98 | 1.99122607569249 |
33 | 1.51851393987789 | 66 | 1.81954393554187 | 99 | 1.99563519459755 |
$5分工合作、同心协力编常用对数表
最基础对数→对数扩充表→素数的对数→合数的对数,这样的四个步骤,使许多人同时作业成为可能。组织分工如下:
1、先由少数人计算最基础对数。要准,取位要多,如编八位对数表,最基础对数至少要取十位以上。
2、再由少数人,分工计算对数扩充表。最基础对数与对数扩充表便作为公用。
3、组织许多人,同时计算素数的对数。每人分担一段,如1—50、50—100、 101—200 、201—400…在各自范围内,计算素数的对数。素数的对数也作为公用。
4、组织许多人,同时计算合数的对数。也是每人分担一段,既互用成果,又互不干涉。
5、每人每天的成果,汇总公布,以便下一步工作时互相利用,提高工效。
结语
假如把乘除比作一条汹涌的河,那末对数表就是一座平缓的桥。它使众多的实用计算者,较轻松的到达彼岸,极大的提高工作效率。但时隔三百年至于今天,那些造桥的人,乃至造桥的方法,己淹没在历史的巨卷之中,对数表也进入了历史博物馆。
我们纪念逝去的人,还要发愿:要发扬先辈追求真理、为全人类效力的精神,为科学的理性发展而学习、而奋斗!
2012年6月 端午期间