计算机的错误计算(四十五)

摘要  用错数分析计算机的错误计算(二)中一个简单案例的错误计算原因;并且指出,即使初始值是精确的,不精确的中间运算(甚至是初始运算)也可能将计算引向错误结果。

       首先,由计算机的错误计算(二十七)知,错数公式是

j-k\approx m+m_1-m_2\,.

上式表示,函数值的错误数字个数 j 比自变量的错误数字个数 k 多约 m+m_1-m_2 位。其中 3个 m 符号依次表示导数、自变量以及函数值的扩展整数位数。

       事实上,上述误差为1,即也可能 j 比 k 多 m+m_1-m_2-1 位[1]。

例1.  已知下列迭代

用错数分析其对应程序的运行状态。
       设

 x_0=12.3\,,\\f(x)=212.3-\frac{2460}{x}\,.

则 f(x_0)=12.3\,. 这时 m_1=m_2=2\,. 而

 f^{\prime}(x_0)=\frac{2460}{x_0^2}=\frac{2460}{12.3^2}\approx 16.26\,, 

因此,m=2\,. 于是,函数值的错误数字个数比自变量的错误数字个数多 m+m_1-m_2=2+2-2=2 位或 2-1=1 位。

       下面讨论对应程序的运行结果。

       在Windows 10,Visual Studio 2010下运行下列代码:

则输出为:

这样,输出并不总是精确的12.3。究其原因,是因为初始值12.3在内存中实际上表示为12.300000000000001,这意味着自变量存在1位错误数字。根据之前的错数分析,函数值应该比自变量多出2位或1位错误数字。从上图可以看出,函数值为12.300000000000011,比自变量多出了1位错误数字。因此,当具有2位错误数字的值再次成为自变量时,下一次的函数值将有3位或4位错误数字。实际上,从上图可知,下一个值是12.300000000000210,确实又增加了1位错误数字。经过14次迭代计算后,输出中不再包含正确有效数字。到了近20次迭代时,输出值已接近200。

       需要注意的是,初始值是准确值;理论上,迭代值始终是该初始值。

[1] 赵世忠. 浮点运算错误计算原因[EB/OL]. 北京:中国科技论文在线 [2017-07-21]. https://www.paper.edu.cn/releasepaper/content/201707-86.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值