matlab中的舍入误差

  • 问题背景
    用matlab生成的以0.2为间隔的等差数列,居然会多0.000000000000001。导致在使用"=="或“>="含有等于的关系运算符时,结果一直存在问题。
    在这里插入图片描述

  • 数值计算中舍入误差
    数值计算中的误差分为两种:截断误差与舍入误差。舍入误差是在于当计算机用二进制数表示十进制数时,而产生的误差。计算机用二进制表示的十进制数准确来讲是一个十进制区间(注意是左闭右开区间)

参考:
MATLAB舍入误差和IEEE754标准深入分析_MATLAB技术论坛_新浪博客: http://blog.sina.com.cn/s/blog_61c0518f0100f6h0.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MATLAB技术论坛原创,原帖参见http://www.matlabsky.com/viewthread.php?tid=3093 该教程详细介绍了MATLAB舍入误差原理和计算,并给出实例验证。 由于涉及很多数学公式和图形,帖不方便展示,下面给出了大概的内容提要,具体参见本帖pdf附件http://www.matlabsky.com/viewthread.php?tid=3093! 舍入误差是计算机进行实数计算是所产生的。之所以产生舍入误差是因为机器进行的算术运算所涉及的数是有限位的,从而导致计算只能用实际数值的近视表示式来完成。在典型的计算机,仅实数系统的一个相对小的子集用来表示所有的实数。这个子集包含了正负有理数,且存储了小数和指数部分。 IEEE754-1985二进制浮点运算标准 MATLAB所有数值都是使用64bit表示的。根据754-1985规定,第一位是符号指示位(S),接下来的11位是指数部分(C),最后称为尾数的52位为小数部分(F),指数的基是2。 X64表示的区间范围 x64=0 10000000011 1011100100010000000000000000000000000000000000000000 y64=0 10000000011 1011100100001111111111111111111111111111111111111111 z64=0 10000000011 1011100100010000000000000000000000000000000000000001 这意味着,二进制机器数x64不仅仅代表十进制的x,还表示x临域内的所有实数,也就是说十进制区间(注意是左闭右开的区间) [(y+x)/2, (x+z)/2)= [15518507114430463/562949953421312, 15518507114430465/562949953421312) 内所有数据都是使用机器数x64表示的。这样机器的截断误差就出现了! 如何确定XMIN和XMAX 从IEEE754-1985的规定,我们容易知道64位机器数能够表示的最小正数,此时第64位为1其它为0,故 xmin=2^(-1023)*(1+0.5^52)≈10^(-308) 在计算小于xmin的数据的时候,MATLAB直接当0处理 同理最大的正数则第1位为0其它为1,故 xmax=2^1024*(2-0.5^52)≈10^308 在计算大于xmax数据时,MATLAB视为Inf X的精度范围求解 二进制数x64的前后一个数,相当于在x64尾数的最后一位加1或减1,故x64与最近的数之间的距离为0.5^52 ,另外指数位会将尾数放大了2^n倍,故最终x的精度为0.5*2^(n-52)(注意必须乘以0.5,原因如上)。故在±0.5*2^(n-52)范围内的数据,MATLAB都用x64表示,也就是认为都是x
MATLAB舍入误差是指由于计算机的有限精度导致的数值计算误差舍入误差可能会在数值计算产生差异,并且可能会累积导致不准确的结果。 为了减小舍入误差的影响,可以采取以下措施: 1. 避免两个非常接近的数相减,这样可以减少有效数字的损失。 2. 避免将绝对值非常小的数作为除数,因为这样可能导致结果的不稳定性。 3. 避免在计算出现大数吃掉小数的情况,因为这样会导致小数部分的丢失。 4. 在进行计算之前,可以先对表达式进行化简,以减少计算舍入误差。 5. 使用数值稳定性较好的算法来进行计算,这样可以降低舍入误差的影响。 此外,在MATLAB,还可以通过调整数值计算的精度和数据显示的格式来进一步控制舍入误差的影响。例如,可以使用较高的精度进行计算,或者采用科学计数法的显示格式来减小舍入误差的影响。 因此,MATLAB舍入误差可以通过以上措施来减小,以得到更准确的数值计算结果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [MATLAB数值计算学习笔记(二)误差理论和非线性方程求解](https://blog.csdn.net/weixin_47255475/article/details/107596731)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值