计算机错误计算详解(第四十五篇)
摘要 用错数分析计算机的错误计算(二)中一个简单案例的错误计算原因;并且指出,即使初始值是精确的,不精确的中间运算(甚至是初始运算)也可能将计算引向错误结果。
首先,由计算机的错误计算(二十七)知,错数公式是
上式表示,函数值的错误数字个数 比自变量的错误数字个数
多约
位。其中 3个
符号依次表示导数、自变量以及函数值的扩展整数位数。
事实上,上述误差为1,即也可能 比
多
位[1]。
例1. 已知下列迭代
用错数分析其对应程序的运行状态。
设
则 这时
而
因此, 于是,函数值的错误数字个数比自变量的错误数字个数多
位或 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.
作者:zaim1