数值分析上机作业最强版.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数值分析上机作业最强版

数值分析上机作业姓 名:唐 皓学 号:142460专 业:道路与铁道工程院 系: 交通学院授课教师:吴 宏 伟日 期:2015年1月习题一题目17.(上机题)舍入误差与有效数设,其精确值为。(1)编制按从大到小的顺序,计算的通用程序;(2)编制按从小到大的顺序,计算的通用程序;(3)按两种顺序分别计算,,,并指出有效位数。(编制程序时用单精度);(4)通过本上机题你明白了什么?通用程序代码按从小到大的顺序计算void AscendSum(unsigned long int N)// 计算从大到小的总和{for(unsigned long int j=2;j=N;j++)ascendSum+=(float)1.0/(j*j-1);coutSum From 1 to N (Ascend) is: ascendSumendl;Error(ascendSum);Delimiter();}按从大到小的顺序计算void DescendSum(unsigned long int N)//计算从小到大的总和{for(unsigned long int j=N;j=2;j--)descendSum+=(float)1.0/(j*j-1);coutSum From N to 1 (Descend) is: descendSumendl;Error(descendSum); Delimiter();}计算结果展示图1 N=100时的计算结果图2 N=10000时的计算结果图3 N=1000000时的计算结果表1-1 计算结果汇总精确值按从小到大按从大到小值有效位数值有效位数0.74004948140.7400494814100.74004954160.74989998340.749852120940.7498999834100.74999898670.75185602920.75299251082计算结果分析(1)如果采用单精度数据结构进行计算,则相较于双精度的数据结果,由于数据存储字长的限制导致计算机存在较大的舍入误差,因此本程序采用的是双精度数据存储方式。(2)由计算结果可知,正序计算和逆序计算的精度是不稳定的。由计算结果可以发现,当N=100时,正序计算(1-N)的精度较高;当N=10000时,逆序计算(N-1)的精度较高;当N=1000000时,正序计算和逆序计算的精度一样。当然,和其他同学做出来的结果对比,结论并不一致。我个人分析这是因为电脑的硬件、软件(位数)不同等原因导致的。但总体而言,在N较小时,正序计算精度高于逆序计算的精度。当N较大时,正序和逆序计算的精度接近。(3)由于计算机的实际计算过程是一种舍入机制,故对于我们计算所采用的加法交换律是不成立的。计算机中若干数相加时,先要进行对阶操作,即将两数的阶数统一为绝对值较大的数的阶数。这样一来将导致绝对值较小的数的有效数字可能会大量损失,增大舍入误差,即所谓的“大数吃小数”现象。为了避免这种现象的出现,在进行加减法的时候应该先将绝对值较小的数相加,再与绝对值较大的数相加这样按阶逐步递增的相加。完整代码#include iostream#include iomanip#include math.husing namespace std;float accurateSum=0,ascendSum=0,descendSum=0;void Delimiter()//输出一系列星号以间隔{for(int i=1;i=50;i++) cout*;coutendl;}void Error(float Sum)//计算绝对误差{float error;error=fabs(Sum-accurateSum);int flag;for(flag=0;flag10;flag++){error=error*10;if (error0.5)break;}coutThere are flag Valid numbers.\n;}void AccurateSum(unsigned long int N)//计算精确值{accurateSum=0.5*(1.5-(float)1/N-(float)1/(N+1));coutAccurate sum is: setprecision(10)accurateSumendl;Delimiter();}void AscendSum(unsigned long int N)//计算从大到小的总和{for(unsigned long int j=2;j=N;j++)ascendSum+=(float)1.0/(j*j-1);coutSum From 1 to N (Ascend) is: ascendSumendl;Error(ascendS

文档评论(0)

zilaiye + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档