- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
常用算法介绍·高精度计算·教案
高精度计算(3)
教学目标
熟练掌握高精度计算的优化方法
重点难点分析
熟练掌握基本的高精度计算优化;
教具或课件
电脑
主要教学过程
引入新课
这节课咱们来学习高精度计算优化的相关知识。
教学过程设计
改善高精度运算的效率
以上接触到的高精度存储方法是用一个整型数组来表示一个很大的数,数组中的每?下面,我们给出两种方法:
(1)扩大进制数
(2)建立因子表
1扩大进制数
我们可以考虑用一个数记录2位数字、3位数字或更多位数字。理论上来说,数组longint记录4位数字是最佳的方案。那么这个数组10000进制的数,其中每一10000进制下的一位数。
1.数据类型
type
numtype=array[O..9999]of: {整数数组类型,可存储40000位十进制数}
va a,n:numtype; {a和n为10000进制的整数数组}
st:strin: {数串}
la,linteger: {整数数组a和n的长度)
2.整数数组的建立和输出
当输入数串st后,我们从左而右扫描数串st,以四个数码为一组,将之对应的10000z中。具体方法如下:
readln(st): {输入数串st}
klength(st); {取得数串st的长度}
for i0 to k-1 do {把st对应的整数保存到数组n中}begin
j←(k_i+3)div 4-1:
n[j] ←n[j]*10+ord(st[i+1])-48:
end;{for}
ln←(k+3)div 4;
当得出最后结果以后,必须按照由次高位([1n-2])到最低位(O])的顺序,将lO 000进制数转换成十进制数,即必须保证每个元素对应四位十进制数。z[i]=0015(0≤i≤ln-2),对应的十进制数不能为15,否则会导致错误结果。我们按
write(n[ln-1]); {输出结果}
for in-2 downto 0 do
write(n[i]div 1000,(n[i]div 100)mod 10,(n[i]div 10)mod 10,n[i]mod 10);
3).介绍几个基本运算
两个整数(10000进制)数组的加法和减法与前面所讲的十进制运算方法相比,除1,整数数组除以整数和两个整数数组相乘的运算。
(1)整数数组减l(nn-l,n为整数数组)
我们从n[0]出发往左扫描,寻找第一个非零的元素(n[j]≠0,n[j-1]=n[j-2]=…=n[0]=0)。由于该位接受了低位的借位,因此减l,其后缀全为9999()。如果最高位为0(ln]=0),则的长度减l。
0: {从n[O]出发往左扫描,寻找第一个非零的元素}
while (n[j]=O) do inc(j);
dec(n[j]); {由于该位接1}
for k←0 to j-l do n[k] ←9999; {其后缀全为9999}
if((j=ln-1)and(n[j]=0)) then dec(ln) {如果最高位为O,则n的长度减l}
(2)整数数组除以整数(a←a/i,a为整数数组,i为整数)
我们按照由高位到低位的顺序,逐位相除。在除到第位时,该位在接受了来自第位的余数(位相除的余数)×10000) 后与i相除。如果最高位为0([la]=0),则a的长度减l。
0; {余数初始化}
for j←la-1 downto 0 do
begin {按照由高位到低位的顺序,逐位相除}
inc(a[j],l*10000,); {接受了来自第j+l位的余数}
l←a[j]mod i; {计算第j位的余数}
a[j] ←a[j]div i; {计算商的第j位}
end:{for}
while(a[1a-1]=0) do dec(1a); {计算商的有效位数}
(3)两个整数数组相乘(a←a X n, a和n为整数数组)
我们按照由高位到低位的顺序,将a数组的每一个元素与n相乘。当计算到[j]]×n时,根据乘法规则,a[j-1],…,a[0]不变,为原[j]与0]的乘积,加上(k=ln-1,ln-2,…,1),然后按照由低位到高位的顺序处理进位。最后,la-1]×n有进位,则乘积的有效位数为la+ln;否则的有效位数为la+ln-1。
For j←la-1 downto 0 do
begi
文档评论(0)