首页 > 代码库 > 《程序员的数学思维修炼》 读书笔记 Chapter 1 数据的表示

《程序员的数学思维修炼》 读书笔记 Chapter 1 数据的表示

1.未赋值的变量--初始化的必要性、

无初始化时,视语言的不同可能有以下几种情况

1)赋值0

2)赋值空

3)不改变该内存块原值,即随此刻值。

4)编译失败

2.除数为0的判断防ERROR

3.大整数的解决方法

1)在Pascal中超过数据类型上限是会报错的、C等则可能出奇葩数据、实质上更增加了挑错难度。(C类该特性待验证)

2)此时就需要我们所称的 高精度 计算--模拟算法。

  通过String(AnsiString)或数组表示一个大整数

  根据人类计算思维编写计算逻辑

  加减乘代码(http://www.cnblogs.com/Catch-22/p/3376384.html)

  1 Procedure Plus(a,b:AnsiSTring);  2   Var  3     Tt,i:longint;  4   Begin  5     if la>lb Then  6       Begin  7         For i:=1 to la-lb do  8           b:=0+b;  9         lb:=la; 10       End 11     Else 12       Begin 13         For i:=1 to lb-la do 14           a:=0+a; 15         la:=lb; 16       End; 17     For i:=1 to la do 18       c[i]:=Ord(a[i])+Ord(b[i])-96; 19     For i:=la Downto 1 do 20       if (c[i]+DC)>=10 Then 21         Begin 22           Tt:=(c[i]+DC) Mod 10; 23           DC:=(c[i]+DC) Div 10; 24           c[i]:=Tt; 25         End 26       Else 27         Begin 28           c[i]:=c[i]+DC; 29           DC:=0; 30         End; 31     c[0]:=-1; 32     if DC>0 Then c[0]:=DC; 33     For i:=0 to la do 34       if c[i]<>-1 Then  Write(c[i]); 35     Writeln; 36   End; 37 Procedure Minus(A,b:AnsiSTring); 38   Var 39     t:AnsiSTring; 40     Tt,i:longint; 41   Begin 42     if la>=lb Then 43       Begin 44         For i:=1 to la-lb do 45           b:=0+b; 46         lb:=la; 47       End 48     Else 49       Begin 50         For i:=1 to lb-la do 51           a:=0+a; 52         la:=lb; 53         Write(-); 54         t:=a; 55         a:=b; 56         b:=t; 57       End; 58     For i:=1 to la do 59       c[i]:=Ord(a[i])-Ord(b[i]); 60     For i:=la Downto 1 do 61       if (c[i])<0 Then 62         Begin 63           c[i]:=c[i]+10; 64           c[i-1]:=c[i-1]-1; 65         End; 66     lb:=1; 67     While (c[lb]=0) And (lb<la) do Inc(lb); 68     For i:=lb to la do 69       if c[i]<>-1 Then  Write(c[i]); 70     Writeln; 71   End; 72 Procedure Multiply(a,b:AnsiString); 73   Var 74     Tt,xx,i,j:longint; 75   Begin 76     xx:=0; Tt:=Maxlongint; 77     For i:=La Downto 1 do 78       For j:=lb Downto 1 do 79         Begin 80           c[i+j-1]:=((Ord(a[i])-48)*(Ord(b[j])-48)+c[i+j-1]); 81           Tt:=Min(Tt,i+j-1); 82           xx:=Max(xx,i+j-1); 83         End; 84     While c[tt]=0 Do Inc(tt); 85     DC:=0; 86     For i:=xx Downto Tt Do 87       Begin 88         if c[i]+DC>=10 Then 89           Begin 90             lb:=c[i]; 91             c[i]:=(c[i]+DC) Mod 10; 92             DC:=(lb+DC) Div 10; 93           End 94         Else                            95           Begin 96             c[i]:=c[i]+Dc; 97             DC:=0; 98           End; 99       End;100     if DC>0 Then Write(DC);101     For i:=Tt To xx do Write(c[i]); //Writeln;102     if Tt>=xx Then Writeln(0) Else Writeln;//Thanks For Luogu.org s Data.103   End;

  除法……等我清醒了再说吧

4.二进制的相对优越性

   据说前苏联曾试图玩三进制……显然……

  技术实现简单性

  运算规则简单性

  逻辑运算简单性

  转换进制简单性

  抗干扰可靠性强

5.二进制的运算规则

  Pre-N进制运算规则 逢N进一

  1) 加法 0+0=0 0+1=1 1+0=1 1+1=10 交换律、结合律成立

  2) 减法 0-0=0  1-1=0  1-0=1  0-1=1  

  3) 乘法 0X0=0 0X1=0  1X0=0 1X1=1  交换律、结合律、分配率成立

  4) 除法 0÷1=0 1÷1=1 0不能作除数无异议。

加法

减法=+(-)

乘法=+++++

除法=+(-)+(-)+(-)+(-)

所以、只需要加法器。

6.八卦与八进制--适用于12位和36位等3N位计算机系统。

  坤艮坎巽震离兑乾

  地山水风雷火泽天

   0 1 2 3 4 5 6 7

12进制、60进制等略

7.进制问题、进制转换(可参考 Richard Courant&Herbert Robbins&Ian Stewart 的《什么是数学》第一章 自然数 1.1整数的计算、) 

B进制转10进制

         n-1

D= ∑  X[i]*B^i

         i=0

 

 

《程序员的数学思维修炼》 读书笔记 Chapter 1 数据的表示