首页 > 代码库 > 高精度计算(1)--引言
高精度计算(1)--引言
我们知道,目前计算机计算数值的精度较高,但因硬件限制,往往达不到实际生产需要,因此我们可以通过对程序进行缜密设计实现高精度计算。今天我们来谈谈这个问题。
首先,我们应知道,高精度计算的工作原理:
像竖式一样,我们可以利用竖式的进位、借位,再通过字符串存储数据与字符串函数的操作、计算,实现高精度计算。
Eg.
5 2 2 a3 a2 a1
+ 6 2 3 + b3 b2 b1
____________________ =====> _________________________
1 1 4 5 c4 c3 c2 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)--引言
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。