码迷,mamicode.com
首页 > 其他好文 > 详细

高精度计算(1)--引言

时间:2014-10-17 00:39:23      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   使用   for   strong   sp   数据   div   

    我们知道,目前计算机计算数值的精度较高,但因硬件限制,往往达不到实际生产需要,因此我们可以通过对程序进行缜密设计实现高精度计算。今天我们来谈谈这个问题。

    首先,我们应知道,高精度计算的工作原理:

    像竖式一样,我们可以利用竖式的进位、借位,再通过字符串存储数据与字符串函数的操作、计算,实现高精度计算。

   Eg.

     5 2 2                           a3 a2 a1

+  6 2 3                       +   b3 b2 b1

____________________             =====>               _________________________          

 1 1 4 5                        c4 cc2 c1

   那么,在高精度计算时,我们应注意什么?

     这就说来话长了······

    1.数据的接收与存储

  当输入数据很长很长······(如:1000位,10000位,10000000...位时),我们只要开出足够的字符串长度,利用字符串函数的操作、计算,将每一位取出,存入数组中。

 1 void init(int a[]) { /*传入数组*/
 2 
 3     string s;
 4     
 5     cin>>s;
 6     
 7     a[0]=s.length(); /*用a[0]计算字符串s的位数*/
 8     
 9     for (i=1;i<=a[0];i++)
10       a[i]=s[a[0]-i]-0;
11     /*s----->a[],并倒序*/
12 
13 }

    另一种是直接用循环加数组方法,也是异曲同工之妙。

 

   2.确定高精度数位数

    位数的确定:接收时往往是使用字符串,所以它的位数==字符串长度

 

  3.进位、退位

 

 1 /*加法进位*/
 2 c[i]=a[i]+b[i];
 3 if (c[i]>=10) {
 4 
 5     c[i]%=10;
 6     ++c[i+1];
 7 
 8 }
 9 
10 /*减法进位*/
11 if (a[i]<b[i]) {
12 
13     --a[i];
14     a[i]+=10;
15 
16 }
17 
18 c[i]=a[i]-b[i];
19 
20 /*乘法进位*/
21 c[i+j-1]=a[i]*b[j]+x+c[i+i-1];
22 x=c[i+j-1]/10;
23 c[i+j-1]%=10;

 

    以上就是高精度计算的理论知识,以后我将会发放相关事例。

  谢谢!

 

高精度计算(1)--引言

标签:style   blog   color   使用   for   strong   sp   数据   div   

原文地址:http://www.cnblogs.com/sanandreas/p/4029735.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!