请您留下宝贵的建议吧:)
广西百色高中欢迎您!

| 网站首页 | 学校概况 | 软件下载 | 图片中心 | 雁过留声 | 视频资源 | 校长信箱 | 内 部 网 |
| 同 学 录 | 网络办公 | 教学课件 | 优秀教案 | 试卷下载 | 教学素材 | 教学论文 | 电子图书 |

 
您现在的位置: 广西百色高中校园网 >> 学校概况 >> 学生频道 >> 信息技术 >> 常用算法 >> 文章正文 用户登录 新用户注册
   
   

高精度算法          【字体:
高精度算法
作者:仔仔    文章来源:本站原创    点击数:    更新时间:2006-9-26
高精度算法
 
一、基本方法

  在计算机上进行高精度计算,首先要处理好以下几个基本问题:

  1、数据的接收与存储;
  2、计算结果位数的确定;
  3、进位处理和借位处理;
  4、商和余数的求法;

  下面我们逐一介绍一下这几个问题的解决方法。

  1、数据的接收与存储:

  要在计算机上进行高精度计算,首先就应该有精确的输入,即计算机要精确地接收和存储数据。通常:

  ①、当输入的数值在计算机允许的范围内时,可以用数值型变量来接收数据。
  ②、当输入的数据超过计算机允许显示的精度范围时,采用字符来接收数据。
  ③、分离各位数字。
  接收数据子模块(字符型变量接收数据):

            QBASIC
            PASCAL

INPUT a$
l=LEN(a$)
DIM a(l) 
FOR i = 1 TO l 
a(i) = VAL(MID$(a$, i, 1)) 
NEXT 
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。
  ②、乘积的位数最大为两个因子的位数之和。
  ③、阶乘与乘方的位数可以采用对数运算来确定计算结果的位数。

  3、进位处理和借位处理

  ①、加法的进位处理

  进行加法处理时,先设置一个加法进位标志 T,并将 T 的初值设为 0。当两数相加时,从低位到高位,各位数字分别相加,如果相加后某个单元中的数大于 10,则将该单元中的数减去10,并将进位标志 T 设为 1,当对下一单元进行相加时,还要再加上前一个单元的进位标志 T。同时将 T 再次置为 0,不断重复,直到最高位为止。具体算法为:

            QBASIC 
            PASCAL

T=0 
对变量 I 从 1 到 N,重复下列步骤: 
C(I)=A(I)+B(I)+T:T=0 
IF C(I)>=10 THEN C(I)=C(I)-10:T=1 
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;

  ②、乘法的进位处理

            QBASIC
            PASCAL

Y=A(I)*B(I)+C:C=Y\10:C(I+J-1)=Y-C*10
Y:=A[I]*B[I]+C;C:=Y div 10;C[I+J-1]:=Y-C*10

  ③、减法的借位处理

            BASIC
            PASCAL 
IF A(I))<B(I) THEN 
A(I+1)=A(I+1)-1 
A(I)=A(I)+10 
END IF 
C(I)=A(I)-B(I) 
IF A[I]B[I] THEN BEGIN
A[I+1]:=A[I+1]-1; 
A[I]:=A[I]+10 
END IF 
C[I]:=A[I]-B[I];

  4、商和余数的求法

  设A,B分别为不大于9位的整数,则:

            QBASIC
            PASCAL

  C=A\B为商的整数部分
  X=A MOD B为余数
  C:=A DIV B为商的整数部分
  X:=A MOD B为余数

  二、算法与实例

  1、求任意位数的加法运算

  【问题分析】:

  ①、数据的接收和存储 采用字符串输入的方式,设参与运算的两个数分别为A和B,利用字符串函数把字符串转化为数值,将A、B中的每一位数字分别存储在A、B两个数组中,最低位在第一个单元中。(PASCAL语言中可以直接采用字符读取的方式来接收数据,而后通过ORD(x)-48的方式转化成数值。)

  ②、确定和的位数

  设LA为A的位数,LB为B的位数,则两数之和的位数最大为较大加数位数加1,即如果LA>LB,则和的位数最大为LA+1。

  ③、进位处理

  进行加法处理时,先设置一个加法进位标志 T,并将 T 的初值设为 0。当两数相加时,从低位到高位,各位数字分别相加,如果相加后某个单元中的数大于 10,则将该单元中的数减去10,并将进位标志 T 设为 1,当对下一单元进行相加时,还要再加上前一个单元的进位标志 T。同时将 T 再次置为 0,不断重复,直到最高位为止。

  程序清单:(略)

QBASIC V4.5 语言源程序

Borland PASCAL V7.0 语言源程序

  2、求任意位数的减法运算

  ①、数据的接收和存储

  采用字符串输入的方式,设参与运算的两个数分别为A和B,利用字符串函数把字符串转化为数值,将A、B中的每一位数字分别存储在A、B两个数组中,最低位在第一个单元中。(PASCAL语言中可以直接采用字符读取的方式来接收数据,而后通过ORD(x)-48的方式转化成数值。)

  ②、确定差的位数

  设LA为A的位数,LB为B的位数,则两数之差的位数最大为较大数的位数,即如果LA>LB,则差的位数最大为LA。

  ③、借位处理

  做减法运算时,要先判断是否需要借位,如果需要借位,从上一位借过一个10,上一位的数减去1,处理完之后再相减。

  ④、负数的处理

  如果减数大于被减数,则交换A、B的值,并令负数标志 T=-1。当打印计算结果时,先判断 T 的值是否为-1,如果T=-1,则在数值前面先输出一个负号。

  程序清单:(略)

QBASIC V4.5 语言源程序

Borland PASCAL V7.0 语言源程序

  3、求任意位数的乘法运算

  ①、数据的接收和存储

  采用字符串输入的方式,设参与运算的两个数分别为A和B,利用字符串函数把字符串转化为数值,将A、B中的每一位数字分别存储在A、B两个数组中,最低位在第一个单元中。(PASCAL语言中可以直接采用字符读取的方式来接收数据,而后通过ORD(x)-48的方式转化成数值。)

  ②、确定积的位数

  设LA为A的位数,LB为B的位数,乘积的位数最多为LA+LB,最少为LA+LB-1。所以,乘积的位数上限为LA+LB。

  ③、算法

  首先计算被乘数与乘数的个位数字的乘积,把结果保存到积数组中,然后再用被乘数去乘以乘数的十位数字,把结果退一位加到积数组中。每加一次乘积结果就进行一次进位处理,其方法与加法中的进位处理一样。

  程序清单:(略)

QBASIC V4.5 语言源程序

Borland PASCAL V7.0 语言源程序

  4、求A÷B的精确值

  由于A和B都是计算机允许的显示精度,故A、B均可使用数值变量来接收与存储。A÷B的精确值有两种情况:

  ①、A能被B整除,没有余数。
  ②、A不能被B整除,对余数进行处理。首先,我们知道,在做除法运算时,有一个不变的量和三个变化的量,不变的量是除数,三个变化的量分别是:被除数、商和余数。做除法运算时,每次都是用被除数减去商与除数的积,如果所得余数不为零,则将其扩大10倍再次作为被除数,继续试除,直至余数为零或达到要求的精确度为止。最后,必须对精确度的后一位求商,然后判断其值而四舍五入得出最后的结果。

  程序清单:(略)

QBASIC V4.5 语言源程序

Borland PASCAL V7.0 语言源程序

  5、求多精度A÷单精度B的商和余数。

  ①、数据的接收和存储

  采用字符串输入的方式,设参与运算的两个数分别为A和B,利用字符串函数把字符串转化为数值,将A中的每一位数字分别存储在A数组中,最低位在第一个单元中。(PASCAL语言中可以直接采用字符读取的方式来接收数据,而后通过ORD(x)-48的方式转化成数值。)。B则可以用一般的整数变量来接收和存储。

  ②、算法

  首先,我们知道,在做除法运算时,有一个不变的量和三个变化的量,不变的量是除数,三个变化的量分别是:被除数、商和余数。做除法运算时,每次都是用被除数减去商与除数的积,如果所得余数不为零,则将其扩大10倍再次作为被除数,继续试除,直至余数为零或达到要求的精确度为止。

  程序清单:(略)

QBASIC V4.5 语言源程序

Borland PASCAL V7.0 语言源程序

  6、5、求多精度A÷多精度B的商和余数。

  ①、数据的接收和存储

  采用字符串输入的方式,设参与运算的两个数分别为A和B,利用字符串函数把字符串转化为数值,将A、B中的每一位数字分别存储在A和B数组中,最低位在第一个单元中。(PASCAL语言中可以直接采用字符读取的方式来接收数据,而后通过ORD(x)-48的方式转化成数值。)。

  ②、算法

  可以用减法代替除法运算:不断比较A[1..n]与B[1..n]的大小,如果A[1..n]>=B[1..n]则商C[1..n]+1→C[1..n],然后就是一个减法过程:A[1..n]-B[1..n]→A[1..n]。由于简单的减法速度太慢,故必须进行优化。设置一个位置值J,当A[1..n]>B[1..n]时。B[1..n]左移→B[0..n],j:=j+1,即令B[1..n]增大10倍。这样就减少了减法的次数。当j>0且A[1..n]<B[0..n]时,B[0..n]右移→B[0..n],j=j-1,即令B[1..n]缩小10倍。
文章录入:qinjun    责任编辑:qinjun 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
          最新热点       最新推荐       相关文章
    没有相关文章
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

       
     
     
     
    广西百色高中欢迎您!   网站地图 | 联系站长 | 友情链接 | 用户排行 | 版权申明 | 管理登录
    版权所有 Copyright© 2005-2010 广西百色高中 (桂ICP备05013955号)
    学校地址:广西百色市城乡路93号 电话号码:0776-2824142 传真:0776-2847293 邮政编码:533000
    站    长:覃钧  QQ:75331465            改版时间:2007年8月20日