首页 > 代码库 > 《程序员的数学思维修炼》 读书笔记 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 数据的表示