- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
高精度算法大全
高精度算法大全
在一般的科学计算中,会经常算到小数点后几百位或者更多,当然也可能是几千亿几百亿的大数字.
一般这类数字我们统称为高精度数,高精度算法是用计算机对于超大数据的一种模拟加,减,乘,除,乘方,阶乘,开放等运算.
譬如一个很大的数字N = 10^ 100, 很显然这样的数字无法在计算机中正常存储.
于是, 我们想到了办法,将这个数字拆开,拆成一位一位的 或者是四位四位的存储到一个数组中, 用一个数组去表示一个数字.这样这个数字就被称谓是高精度数.
对于高精度数,也要像平常数一样做加减乘除以及乘方的运算,于是就有了高精度算法:
16位有效数字,如果超过16位,则只能按浮点形式输出,另外,一般计算机实数表示的范围为1038,如果超过这个范围,计算机就无法表示了。但是我们可以通过一些简单的办法来解决这个问题。这就是我们要说的高精度计算机。
一、基本方法: 在计算机上进行高精度计算,首先要处理好以下几个基本问题:
1、数据的接收与存储;
2、计算结果位数的确定;
3、进位处理和借位处理;
4、商和余数的求法;
下面我们逐一介绍一下这几个问题的解决方法。
1、数据的接收与存储:
要在计算机上进行高精度计算,首先就应该有精确的输入,即计算机要精确地接收和存储数据。通常:
①、当输入的数值在计算机允许的范围内时,可以用数值型变量来接收数据。
②、当输入的数据超过计算机允许显示的精度范围时,采用字符来接收数据。
③、分离各位数字。
接收数据子模块(字符型变量接收数据):
prucedure readdata(var in:array[1..100] of integer);
var ch:char;
i,k:integer;
begin
read(ch);k:=0;
while ch in[0..9] do begin
inc(k);int[k]:=ord(ch)-48;
read(ch);
end;
end;
2、计算结果位数的确定
①、两数之和的位数最大为较大的数的位数加1。
②、乘积的位数最大为两个因子的位数之和。
③、阶乘:lgn!=lgn+lg(n-1)+lg(n-2)...................+lg3+lg2+lg1
=lnn/ln10+ln(n-1)/ln10+ln(n-2)/ln10+................+ln3/ln10+ln2/ln10+ln1/ln10
=trunc(1/ln10* (lnn+ln(n-1)+ln(n-2)+...........+ln3+ln2+ln1) )
乘方:lg(a ^b)=trunc(lg(a^b))+1
=trunc(b*lg a )+1
=trunc(b*ln a / ln10)+1
3、进位处理和借位处理
①、加法的进位处理
进行加法处理时,先设置一个加法进位标志 T,并将 T 的初值设为 0。当两数相加时,
从低位到高位,各位数字分别相加,如果相加后某个单元中的数大于 10,则将该单元中的数
减去10,并将进位标志 T 设为 1,当对下一单元进行相加时,还要再加上前一个单元的进位
标志 T。同时将 T 再次置为 0,不断重复,直到最高位为止。具体算法为:
T:=0;
对变量 I 从 1 到 N,重复下列步骤:
C[i]:=A[i]+B[i]+T;T:=0;
IF C[i]=10 THEN BEGIN
C[i]:=C[i]-10;T:=1;
END;
②、乘法的进位处理
Y:=A[i]*B[i]+C;C:=Y div 10;C[I+J-1]:=Y-C*10
③、减法的借位处理
IF A[i] A[I+1]:=A[I+1]-1;
A[i]:=A[i]+10
END IF
C[i]:=A[i]-B[i];
4、商和余数的求法
设A,B分别为不大于9位的整数,则:
C:=A DIV B为商的整数部分
X:=A MOD B为余数
二、算法与实例:
1、求任意位数的加法运算
【问题分析】:
①、数据的接收和存储
采用字符串输入的方式,设参与运算的两个数分别为A和B,利用字符串函数把字符串转
化为数值,将A、B中的每一位数字分别存储在A、B两个数组中,最低位在第一个单元中。(PA
SCAL语言中可以直接采用字符读取的方式来接收数据,而后通过ORD(x)-48的方式转化成数值
。)
②、确定和的位数
设LA为A的位数,LB为B的位数,则两数之和的位数最大为较大加数位数加1,即如果LA
LB,则和的位数最大为LA+1。
③、进位处理
进行加法处理时,先设置一个加法进位标志 T,并将 T 的初值设为 0。当两数相加时,
从低位到高位,各位数字分别相加,如果相加后某个单元中的数大于 10,则将该单元中的数
减去10,并将进位标志 T 设为 1,当对
您可能关注的文档
最近下载
- 价值2万的哲纳理论(初级)培训课件.pdf VIP
- 湖北省武汉市部分学校2025~2026学年度高三年级九月调研考试英语+答案.pdf VIP
- 高中历史《国别史专题一:英国》复习资料整理.docx VIP
- 手术室低值耗材管理.pptx VIP
- 音乐剧介绍课件.ppt VIP
- 哲纳理论20110109宝图老师1248整理形态.doc VIP
- 药品GMP文件 005称量记录.doc VIP
- 哲纳理论第一期级篇之失败格局.doc VIP
- 20210622-华泰证券-房地产行业:公募REITs系列研究之三,未来已来.pdf VIP
- 新解读《GB_T 20833.1 - 2021旋转电机 绕组绝缘 第1部分:离线局部放电测量》最新解读.pptx VIP
文档评论(0)