|
[这个贴子最后由ysr在 2011/02/17 11:37am 第 2 次编辑]
如下方法是否可编称?有无数学问题?
1,除数位数小于计算机处理位数的情况
除法是乘法的逆运算,把被除数和除数分段再从高位到低位依次分别相除,把商的整数部分错位相加,每次余数与下一段并在一起再与除数下一段相除,最后一段的余数就是总余数,公式:M/A=(M1+M2+M3+……)/A+,求余数为,最后一项的余数就是总余数,Yn=Y(n-1)+Mn-A其中n-1为下角码.距离;举例:
232425/26=8939,2324/26=89,余10,1025/26=39,余11,商错位加8900+39=8939,余数232425-26*8939=11,余数相同.
2,被除数和除数位数都大的情况
分段依次相减,商错位相加,补零,补够段位,公式:
M/A=M1/A1(设其整数值为S)+Y1+M2-SA2+Y2+M3-SA3+……+Yn+M(n+1)-S1A1+Y(n+1)+M(n+2)-S1A2+……余数为最后一项的余数与剩余被除数段并起来的值,
若某项余数为负,则余数加该除数段,直到变成正数,加了M次则商为(S+M)/2,赋值给S,即S=(S+M)/2,返回最高位,从头再依次减,(这点易证:设S新=S-X,则必有S新=M+X,所以2S新=S+M)从头再依次减……直到被除数所剩段位小于或等于除数段位,不能再减,此时,余数与被除数剩余段位并一起为总余数,商值错位加补零,即为最后商。若最高被除数位段小于除数,则两段除以一段。
举例754699/1999=377,余数1076,75/19=3,余18,1846-3*99=1549,一次商为300,1549/19=81,余7,799-81*99=-7220,
7220/99=72,则商为(81+73)/2=77,余1549-77*19=86,8699-77*99=1076,最后余1076,商错位加300+77=377
[br][br][color=#990000]-=-=-=-=- 以下内容由 ysr 在 时添加 -=-=-=-=-
[br][br][color=#990000]-=-=-=-=- 以下内容由 ysr 在 时添加 -=-=-=-=-
当余数位数超过1段时可能遇到借位问题,高位段00000的借位处理 为此分段位数每段小于等于计算机处理位数的1/3)
原则是在余数的高位段末尾减1变为字符串,具体方法是当余数位数超过1个段位时,高位预留借位值1,将高位段末尾减1,当字符串保留,段位做标记如D=2等,低位段参加下级运算,若下级余数为负,则加100……(两个段位的0)变为正值,高位末尾减1变为字符不动,低位参加下级运算,
若下级余数为正,看次高位无数字补上1个段位的9,有数字则减1,变字符串,低位参加下级运算,
依次下去负正都这样处理,最后把余数字符串处理一下,再和下面的计算,处理方法是,从倒数2段始,高位段末尾加1,和超过的位不能进位,如99999+1=00000,即和取末尾1段位,所得字符和低位并一起,注意顺序,高低位不要乱,至标记段止,得到新字符串,在做下面计算,长数据手工算慢,举例略
[br][br][color=#990000]-=-=-=-=- 以下内容由 ysr 在 时添加 -=-=-=-=-
以上为10进制的,2进制的可这样:当余数位数超过1段时可能遇到借位问题,高位段00000的借位处理,高位段00000借1后则变为11111(1个段位的1),低位段参加下级运算,若下级余数为负,则加100……(两个段位的0)变为正值,高位末尾减1变为字符不动,低位参加下级运算,
若下级余数为正,看次高位无数字补上1个段位的1,有数字则减1,变字符串,低位参加下级运算,
依次下去负正都这样处理,最后把余数字符串处理一下,再和下面的计算,处理方法是,从倒数2段始,高位段末尾加1,和超过的位不能进位,如11111+1=00000,即和取末尾1个段位,所得数可转化成10进制字符和低位并一起,注意顺序,高低位不要乱,至标记段止,得到新字符串,在做下面计算
大整数的乘除开平方运算,分段位数是,每段小于等于计算机处理位数的1/3,开平方每段必须是偶数位数,加减运算段位位数可以是小于等于计算机处理位数的1/2,这样不会溢出。
|
|