- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
高精度运算c语言
高精度运算 内蒙古师范大学计算机与信息工程学院 孟繁军 运算的前提条件:类型范围 确定各类型的取值范围 int: -2,147,483,648——2,147,483,647 unsigned int: 0 to 4,294,967,295 long int:-2,147,483,648 to 2,147,483,647 long long: -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 float:3.4E +/- 38 (7 digits) double:1.7E +/- 308 (15 digits) long double:1.2E +/- 4932 (19 digits) 高精度运算的基本方法 1、加数、减数、运算结果的输入和存储运算因子超出了整型、实型能表示的范围,肯定不能直接用一个数的形式来表示。在运算过程中,能表示多个数的数据类型有两种:数组和字符串。 (1)数组:每个数组元素存储1位(在优化时,这里是一个重点!),有多少位就需要多少个数组元素;用数组表示数的优点:每一位都是数的形式,可以直接加减;运算时非常方便用数组表示数的缺点:数组不能直接输入;输入时每两位数之间必须有分隔符,不符合数值的输入习惯; (2)字符串:字符串的最大长度是多少,可以表示多少位数字?用字符串表示数的优点:能直接输入输出,输入时,每两位数之间不必分隔符,符合数值的输入习惯;用字符串表示数的缺点:字符串中的每一位是一个字符,不能直接进行运算,必须先将它转化为数值再进行运算;运算时非常不方便; (3)因此,综合以上所述,对上面两种数据结构取长补短:用字符串读入数据,用数组存储数据: 高精度运算的运算过程 在往下看之前,大家先列竖式计算35+86。注意的问题:(1)运算顺序:两个数靠右对齐;从低位向高位运算;先计算低位再计算高位;(2)运算规则:同一位的两个数相加再加上从低位来的进位,成为该位的和;这个和去掉向高位的进位就成为该位的值;如上例:3+8+1=12,向前一位进1,本位的值是2;可借助取余、整除运算完成这一步;(3)最后一位的进位:如果完成两个数的相加后,进位位值不为0,则应添加一位;(4)如果两个加数位数不一样多,则按位数多的一个进行计算; 高精度的十进制算 一般形式: 输入时为数串 转化为整数数组(该数组的每一个元素对应一位十进制数,并使用一变量记录数组的实际长度,即数组元素有效个数) 转化方法: memset(a,0,number*sizeof(int)); k=length(s); for(i=1;i=k;i++) a[k-i+1]=s[i]-’0’; 加法运算 确定a和b中的最大位数x(x=max{la,lb}) 依照由低位至高位(第1位至第x位)的顺序进行加法运算。 在每一次的运算中,a当前位加b当前位的和除以10,其商即为进位,其余数即为和的当前进位。 在进行了x位的加法后,若最高位有进位(a[x+1]0),则a的长度为x+1。 加法运算算法 /*实现a=a+b*/ void add(int a[],int b[]) { int i,x; if (la=lb) x=la; else x=lb; for(i=1;i=x ;i++) { a[i]=a[i]+b[i]; a[i+1]=a[i+1]+a[i]/10; a[i]=a[i]%10; } while(a[x+1]0) x=x+1; la=x-1; 减法运算 依照由低位至高位(第1位至第la位)的顺序进行减法运算。 在每一次的减法运算中,若出现不够减的情况(a[i]b[i]),则向高位借位(a[i+1]=a[i+1]-1, a[i]=a[i]+10)。 在进行了la位的减法后,若最高位为零(a[la]=0),则a的长度减1。 减法运算算法 /*a=a-b*/ void sub(int a[],int b[]) { int i; for(i=1;i=la;i++) { if(a[i]b[i]) { a[i+1]=a[i+1]-1; a[i]=a[i]+10; } a[i]=a[i]-b[i]; } while (a[la]==0) la- -; } 乘法运算 按照乘法规则,从a的第1位开始逐位与C相乘。 在第i位乘法运算中(1≤i≤la),a的i位与C的乘积必加上i-1位的进位(i-1位的乘积除以10的整商),然后规整积的i-1位(取i-1位的乘积对10的余数)。 乘法运算算法 void multiply(int a[]
您可能关注的文档
最近下载
- 装饰图案概述.ppt VIP
- 香港中學會考試題(甲部).doc VIP
- 德阳市城市道路更新技术导则(2022).pdf
- 2023年香港亚洲国际数学奥林匹克公开赛(AIMO)竞赛复赛数学试卷.doc VIP
- “双减”背景下家长的教育焦虑及消解路径.docx VIP
- 装饰图案第6章 装饰图案色彩.ppt VIP
- 海尔基于工业4.0智能制造工厂服务平台智能柔性生产线方案(224页).ppt VIP
- 装饰图案第8章 装饰图案与应用设计.ppt VIP
- 房屋市政工程生产安全重大事故隐患判定标准(2024版)危险性较大的分部分项工程专项施工方案严重缺陷清单解读.pdf VIP
- 装饰图案第5章 装饰图案的造型、构图及组织形式.ppt VIP
文档评论(0)