首页 » 技术分享 » 回到十七世纪,让我来编算一本常用对数表(对数结果是小数,要有分数的思想,指数的幂是分数,这样可以实现小数分数转化位整数的幂的求法)

回到十七世纪,让我来编算一本常用对数表(对数结果是小数,要有分数的思想,指数的幂是分数,这样可以实现小数分数转化位整数的幂的求法)

 

 

原文地址:回到十七世纪,让我来编算一本常用对数表作者:小牛

自十八、九岁学习了对数后,就觉得造对数表真不简单。据说十七世纪那时,说如果谁发现了对数表上有一个数字错,就奖一两黄金。

 

   据百科百度:纳皮尔(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.16227766的对数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。

   3 3.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.995262.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.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月 端午期间

转载自原文链接, 如需删除请联系管理员。

原文链接:回到十七世纪,让我来编算一本常用对数表(对数结果是小数,要有分数的思想,指数的幂是分数,这样可以实现小数分数转化位整数的幂的求法),转载请注明来源!

0