- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
高精度运算 内蒙古师范大学计算机与信息工程学院 孟繁军 运算的前提条件:类型范围 确定各类型的取值范围 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[]
您可能关注的文档
最近下载
- 江苏2026届高三语文复习:写作课时作业.doc VIP
- 第3课《雕塑着色变彩身》-2025-2026学年岭南美版(2024)美术新教材八年级上册.pptx VIP
- 肾上腺囊肿的护理业务学习.pptx VIP
- 冀教版七年级上册数学精品教学课件 第五章 一元一次方程 项目学习——主题活动(一) 做个小小会计师.ppt VIP
- 临时用电及防爆-授课版.pdf VIP
- CH3.5.5.11自研软件网络安全研究报告.doc VIP
- 自动扶梯调试手册YSTS-0001-C.docx VIP
- 2022年历史学研究发展报告.docx VIP
- T_CITS 233-2025 液相色谱-质谱联用用于脂溶性维生素检测通用技术要求.pdf VIP
- 中建建筑给排水工程施工方案.pdf VIP
文档评论(0)