APP下载

同符号数相加“大数吃小数”的界限:数值试验

2014-08-06李建平

天津师范大学学报(自然科学版) 2014年2期

曹 靖 ,李建平

(1.中国科学院a.大气物理研究所,b.研究生院,北京100029;2.天津理工大学理学院,天津300384)

“大数吃小数”现象[1]是数值运算中常见的一种影响计算精度的现象,当以计算机计算一个实数a与实数b≠0的代数和时,如果|b|相对于|a|小到一定程度,会出现a+b=a的现象,一般称作数b被数a“吃掉”了.“大数吃小数”现象一个典型的例子[2]就是计算N个实数的累加和3,…,N.若以正常顺序累加,则自a2之后所有元素均被a“1吃掉”,累加结果为如果N取值很大,那么很可能是个较大的数,这样数值计算就会有一个较大的误差.另一个例子是在数值运算的网格剖分中,如果剖分选取的分辨率(步长)过小,那么计算过程中它有可能会被“吃掉”,出现网格的某些节点无法生成的情况,从而进一步影响数值运算精度.

目前,已存在一些避免“大数吃小数”现象的方法[2,3].做N个实数的累加和时,可调换相加顺序,将绝对值较小的数先进行累加,以避免“大数吃小数”现象,但仍存在2种风险:1.前面“小数”的累加值相比于后面“大数”仍然足够小到被“吃掉”,调换顺序起不到作用;2.前面若干“小数”的累加值远大于后面的“大数”,从而将其“吃掉”,使运算结果更加不可预料.可见,仅靠目前的方法并不能完全避免危及精度的现象发生.为真正避免此类现象的发生,找到准确判断其发生的界限,就显得十分迫切和必要.本研究针对两同符号数相加的问题,通过数值试验与理论分析,给出“大数吃小数”现象发生的界限,从而为……

登录APP查看全文