改善高精度运算的效率

改善高精度运算的效率

ID:42445281

大小:80.50 KB

页数:14页

时间:2019-09-15

改善高精度运算的效率_第1页
改善高精度运算的效率_第2页
改善高精度运算的效率_第3页
改善高精度运算的效率_第4页
改善高精度运算的效率_第5页
资源描述:

《改善高精度运算的效率》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、改善高精度运算的效率用一个整型数组来表示一个很大的数,数组中的每一个数表示一位十进制数字。这种方法的缺点是,如果十进制数的位数很多,则对应数组的长度会很长,并增加了高精度计算的时间。改善高精度运算效率的两种方法⑴扩大进制数⑵建立因子表—、扩大进制数、、亠用一个Longint记录4检数字是最佳的方案。那么这个数组就相当于一个10000进制的数,其中每一个元素都是10000进制下的一位数。1、数据类型typenumtype=array[0..9999]oflongint;{整数数组类型,可存储40000位十进制数}vara,n

2、:numtype;{a和n为10000进制的整数数组}string*(数la*IninUger;【整数切组a和n的长度}2、整数数组的建立和输出当端入数由st后,我彳门从左而右扫描数串st,以四个数码为一组,将之对应的10000进制数存入n数组中。具体方法如下:readln(st);{输入数串st}k^-length(st);{取得数串st的长度}fori~0tok-1dobegin{把$1:对应的整数保存到数组口中}jj(k・i+3)div4-1;n[j]<-n[j]*10+ord(st[i+l])-48;end;{fo

3、r}Inj(k+3)div4;当得出最后结果a后,必须按照由次高位(a[la-2])到最低位(a[0])的顺序,旃每一位元秦由10000进制数转扌負成10毬制数,即必须保证每个元素对应四位10进制数。例如a[i]=0015(0WiWla・2),对应的10进制数不能为15,否则会导致错误结果。我们按照如下方法输出a对应的10进制数:write(a[la-l]);{输出结果}foriTa・2downto0dowrite(a[i]div1000,(a[i]div100)mod10,(a[i]div10)mod10,a[i]mod

4、10);3>介绍几个基本运算⑴整数数组・1(n-n-1,11为整数数组)我们从n[0]出发往左扫描,寻找第一个非零的元素n[j-l]=n[j-2]=..=n[0]=0)。由于该位接受了底位的借位,因此减1,其后缀全为9999(n

5、j]=n[j]-l,n

6、j-l]=n[j-2]=...=n[0]=9999)。如果最高位为0(n[ln]=O),贝Ijn的丧度减1。j—0;{从n[0]出发往左扫描,寻找第一个非零的元素}while(n[j]=O)doinc(j);dec(n[j]);{由于该位接受了底位的借位,因此减1}fork

7、^=0toj-1don[k]^9999;{其后缀全为9999}if((j=ln-l)and(n[j]=O))thendec(ln);{如果最高位为0,贝ijn的长度减1}⑵整数数组除以整数(a-a/i,a为整数数组,i为整数)我们按照由高位到底位的顺序,逐位相除。在除到第j位时,该位在接受了来自j+l位的余数(a[j]-a[j]+(j+l位相除的余数)*10000)后与i相除。如臬最高位为0(n[ln]=0),贝tin的长度减1。1-0;{余数初始化}forj^la-1downto0dobegin{按照由高位到底位的顺序,

8、逐位相除}inc(a[j],1*10000);{接受了来自第j+l位的余数}1—a[j]modi;{计算第j位的余数}a[j]divi;{计算商的第”立}end;{for}while(a[la-l]=0)dodec(la);{计算商的有效位数}⑶两个整数数组相乘(a~a*n,a和n为为整数数组)我们按照由高位到底位的顺序,将a数组的每一个元素与n相乘。当计算到时,根据乘法规则,aU-1],…,班0]不变,a[j]为叩]为a[j]与n[0]的乘积,a[j+k]加上a[j]*n[k]的乘积(k=ln-l,ln-2,…,1),然

9、后按照由底位到高位的顺序处理进位。最后,如>a[la-l]^n有进位,则乘积a的有效位数为la+ln;否则a的有效位数为la+ln-1oforj^-la-1downto0do{al—8*11}fork^-ln-1downto0doinc(al[j+k-l],a[j]*n[k]);a^-al;1-0;{进位初始化}forj^-0tola+ln-1dobegin{按照由底位到高位的顺序处理进位}inc(l,a[j]);{计算经过进位后的第」位}a[j]-1mod10000;{将第j位规整为10000进制数}1—1div1000

10、0;{计算进位}end;{for}if(a[la+ln-l]<>0)theninc(la.In){修改有效位数}elseinc(la,ln-1);现今,社会上流行着各种各样的福利彩票,彩票已经融入到了人们的日常生活之中。彩票之所以能吸引那么多的人们,玩法多是一大原因。其中有一类是从前N个自然藪锤岀M个(

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。