原文地址:回到十七世纪,让我来编算一本常用对数表作者:小牛
自十八、九岁学习了对数后,就觉得造对数表真不简单。据说十七世纪那时,说如果谁发现了对数表上有一个数字错,就奖一两黄金。
据百科百度:纳皮尔(1550~1617年),苏格兰数学家,对数的创始人。他的最大贡献是发明了对数。纳皮尔的杰作《奇妙的对数定律说明书》于1614年6月在爱丁堡出版。纳皮尔的朋友,英国人布里格斯,将纳皮尔创立的对数改为常用对数,它才得到广泛使用。并在1624年出版了《对数算术》,公布了以10为底包含1—20000及90000—的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/,那末先算10的30103的次方,再开次方,倒是有道理的,但2的对数是0.30103,决不可能是这样算的,所以仍很玄。那么2的对数是0.30103,到底是怎样算出来的呢?
这么一想就有一个启发,就是10的零点几次方,可以这样算:先乘方、再开方,而主要是开方。例如10的开平方,就是10的0.5次方。10的开3方,就是10的0.33333次方等等。受此启发,经反复试算,得到编算常用对数表的步骤和方法:
$1 先求最基础的对数
1 、我想,世界上第一个常用对数,可能就是3.的对数0.5。因为 3. = √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.0000…最后定为3.。也就是说3.的对数为0.。
2、 第二个,可能就是2.的对数为0.了。因为2. = 3√10 =10^(1/3)
= 10^0.33333 ,而0.就是它的对数。10的开3方比较麻烦,可以逐步试算趋近。如先用2.15*2.15*2.15 = 9.9384,不够,再用2.1544*2.1544*2.1544 = 9.99952,还不够,再试,最后定为2.。也就是说2.的对数为0.。
3 3.的对数为0.。2.的对数为0.…这样的对数,我称它们为最基础的对数。最基础的对数需要多少个呢?这里仅算出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. |
0. |
D=1/2 |
|
| 3√10= |
2. |
0. |
D=1/3 |
|
| 5√10= |
1. |
0. |
D=1/5 |
|
| 7√10= |
1. |
0. |
D=1/7 |
|
| 11√10= |
1. |
0.090909 |
D=1/11 |
|
| 13√10= |
1. |
0.076923 |
D=1/13 |
|
| 17√10= |
1. |
0.058824 |
D=1/17 |
|
| 19√10= |
1. |
0.052632 |
D=1/19 |
|
$2 基 础 对 数 表 扩 充
有了上面的最基础的对数之后,就根据对数基本原理:真数相乘除,对数便加减的方法,可将最基础的对数扩充。例如:
1 (2√10)*(5√10) = 3.*1.=5.01187
相应之对数为:0.+0.=0.70000
2 (2√10)/(5√10) = 3./1.=1.99526
相应之对数为:0.-0.=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.99526 A=0.30000
b= 2.01788 B=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 |
|
|
|
|
|
|
Lg Z=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 |
|
|
|
|
|
|
Lg Z=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 |
|
|
|
|
|
|
Lg Z=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 |
|
|
|
|
|
|
Lg Z=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 |
|
|
|
|
|
Lg Z=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 |
|
|
|
|
|
Lg Z=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.226 |
67 |
1.083 |
| 2 |
0.398 |
35 |
1.028 |
68 |
1.624 |
| 3 |
0.966 |
36 |
1.729 |
69 |
1.726 |
| 4 |
0.796 |
37 |
1.699 |
70 |
1.426 |
| 5 |
0.602 |
38 |
1.681 |
71 |
1.908 |
| 6 |
0.364 |
39 |
1.650 |
72 |
1.127 |
| 7 |
0.426 |
40 |
1.796 |
73 |
1.046 |
| 8 |
0.194 |
41 |
1.974 |
74 |
1.098 |
| 9 |
0.933 |
42 |
1.790 |
75 |
1.170 |
| 10 |
1.00000000000000 |
43 |
1.959 |
76 |
1.079 |
| 11 |
1.023 |
44 |
1.619 |
77 |
1.248 |
| 12 |
1.062 |
45 |
1.534 |
78 |
1.048 |
| 13 |
1.684 |
46 |
1.157 |
79 |
1.044 |
| 14 |
1.824 |
47 |
1.572 |
80 |
1.194 |
| 15 |
1.568 |
48 |
1.559 |
81 |
1.865 |
| 16 |
1.592 |
49 |
1.851 |
82 |
1.372 |
| 17 |
1.827 |
50 |
1.602 |
83 |
1.607 |
| 18 |
1.331 |
51 |
1.794 |
84 |
1.188 |
| 19 |
1.283 |
52 |
1.480 |
85 |
1.429 |
| 20 |
1.398 |
53 |
1.079 |
86 |
1.357 |
| 21 |
1.392 |
54 |
1.297 |
87 |
1.862 |
| 22 |
1.221 |
55 |
1.424 |
88 |
1.017 |
| 23 |
1.759 |
56 |
1.620 |
89 |
1.491 |
| 24 |
1.161 |
57 |
1.249 |
90 |
1.932 |
| 25 |
1.204 |
58 |
1.294 |
91 |
1.109 |
| 26 |
1.082 |
59 |
1.214 |
92 |
1.556 |
| 27 |
1.899 |
60 |
1.364 |
93 |
1.394 |
| 28 |
1.222 |
61 |
1.077 |
94 |
1.970 |
| 29 |
1.896 |
62 |
1.825 |
95 |
1.885 |
| 30 |
1.966 |
63 |
1.358 |
96 |
1.957 |
| 31 |
1.427 |
64 |
1.389 |
97 |
1.624 |
| 32 |
1.991 |
65 |
1.286 |
98 |
1.249 |
| 33 |
1.789 |
66 |
1.187 |
99 |
1.755 |
$5 分工合作、同心协力编常用对数表
最基础对数→对数扩充表→素数的对数→合数的对数,这样的四个步骤,使许多人同时作业成为可能。组织分工如下:
1、先由少数人计算最基础对数。要准,取位要多,如编八位对数表,最基础对数至少要取十位以上。
2、再由少数人,分工计算对数扩充表。最基础对数与对数扩充表便作为公用。
3、组织许多人,同时计算素数的对数。每人分担一段,如1—50 、50—100 、 101—200 、 201—400…在各自范围内,计算素数的对数。素数的对数也作为公用。
4、组织许多人,同时计算合数的对数。也是每人分担一段,既互用成果,又互不干涉。
5、每人每天的成果,汇总公布,以便下一步工作时互相利用,提高工效。
结 语
假如把乘除比作一条汹涌的河,那末对数表就是一座平缓的桥。它使众多的实用计算者,较轻松的到达彼岸,极大的提高工作效率。但时隔三百年至于今天,那些造桥的人,乃至造桥的方法,己淹没在历史的巨卷之中,对数表也进入了历史博物馆。
我们纪念逝去的人,还要发愿:要发扬先辈追求真理、为全人类效力的精神,为科学的理性发展而学习、而奋斗!
2012年6月 端午期间

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/33724.html