?

同符號數相加“大數吃小數”的界限:數值試驗

2014-08-06 07:02李建平
關鍵詞:大數界限小數

曹 靖 ,李建平

(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.前面若干“小數”的累加值遠大于后面的“大數”,從而將其“吃掉”,使運算結果更加不可預料.可見,僅靠目前的方法并不能完全避免危及精度的現象發生.為真正避免此類現象的發生,找到準確判斷其發生的界限,就顯得十分迫切和必要.本研究針對兩同符號數相加的問題,通過數值試驗與理論分析,給出“大數吃小數”現象發生的界限,從而為實際運算提供理論指導.

1 機器雙精度下“大數吃小數”的界限

1.1 兩正數相加的數值試驗

設A>0為一“大數”,CA>0為可被A“吃掉”的最大“小數”.在計算機雙精度下,分別應用Matlab、Fortran以及C等3種計算機語言進行大量數值試驗,發現3種語言計算出的A與CA的關系都呈現出相同的規律.以Matlab為例,給出A∈[0.1,10]時的部分試驗結果,如圖1所示.由圖1可見,A所處的區域可被分為若干區間段,在每個區間段內,雖然A的取值不同,但被其吃掉的最大“小數”CA卻十分接近,從而圖形呈現階梯形狀.特別地,在每個區間段內,lg A與lg(CA/A)之間呈現線性關系,因此,下面考慮應用這種分段線性關系,推導出CA的計算公式.

圖1 機器雙精度下A與CA及lg A與lg(CA/A)的關系Fig.1 A versus CAand lg A versus lg(CA/A),under double machine precision

1.2 兩正數相加lg(CA/A)關于lg A的分段線性擬合

為考察lg(CA/A)關于lg A的分段線性關系,進行了大量數值試驗.首先,根據試驗數據計算出lg(CA/A)關于lg A斜率的變化規律,將lg A所屬區間進行分段,即估計出試驗所涉及的每段線性區間的左、右頂點坐標.然后,分別計算出lg A每個分段區間的長度,以及區間內lg(CA/A)關于lg A線性擬合的斜率.部分試驗結果見表1.

表 1 機器雙精度下,當 A∈(10-2,102)時,lg(CA/A)與lg A線性關系Tab.1 Linear relationship between lg(CA/A)and lg A,when A∈(10-2,102),under double machine precision

由表1可見,不同區間段之間滿足十分相似的線性關系:lg A分段區間長度都近似為0.301,并且,每個區間段內,lg(CA/A)關于lg A線性擬合的斜率都接近于-1,且 lg(CA/A)均在[-16.256,-15.955]范圍內單調遞減.由此便可估計lg(CA/A)關于lg A的分段線性擬合函數.

首先,給出每個分段線性區間左頂點坐標.由表1可見,lg A=0為某一分段區間的左頂點,又因每個區間段長度均近似為0.301,則可記“大數”A屬于第k(k∈Z)段區間,其中 k=floor(lg A/0.301),floor表示向負無窮方向取整.并且,此第k段區間的左頂點坐標應為(0.301k,-15.955),k∈Z.然后,以表示 CA的分段線性擬合近似值,若A屬于第k段區間,結合上述試驗中區間段內lg(CA/A)關于lg A線性擬合的斜率以及左頂點坐標,得此區間段內lg(/A)關于lg A的線性擬合函數為

為驗證式(1)的擬合效果,隨機選取不同的“大數”A,將數值試驗得到的CA值與由式(1)計算出的擬合值進行比較,見表2.表2數據說明式(1)具有良好的擬合效果.

表2 機器雙精度下與CA比較Tab.2 Comparison between and CAfor random,under double machine precision

表2 機器雙精度下與CA比較Tab.2 Comparison between and CAfor random,under double machine precision

A數值試驗結果CA 擬合值C A 1.00 1.109×10-16 1.109×10-16 16.13 1.776×10-15 1.774×10-15 282.60 2.839×10-14 2.838×10-14 3 596.00 2.269×10-13 2.270×10-13 7.92×106 4.653×10-10 4.645×10-10 1.00×10-2 8.670×10-19 8.670×10-19 3.45×10-3 2.167×10-19 2.168×10-19 5.88×10-5 3.383×10-21 3.388×10-21

1.3 兩負數相加情況

設A′<0為一“大數”,應尋找C′A為全體負數中可被A′吃掉的最小的“小數”,同時也是絕對值最大的“小數”.大量數值試驗結果表明,當|A′|=A時,總有|C′A|=CA.因此,可將上述兩正數相加情況的分段線性擬合結果直接推廣至兩負數相加情況.令′A為C′A的擬合值,則結合式(1)可得

1.4 雙精度下“大數吃小數”界限的近似公式

結合式(1)與式(2),可得機器雙精度下兩同號數相加時,“大數吃小數”現象發生界限的統一近似公式.

結論1 在機器雙精度下進行運算,對于任意符號相同的兩實數A與B,當且僅當|B|≤CA時,機器運算結果為A+B=A,其中

2 機器單精度下“大數吃小數”的界限

經與雙精度類似的過程分析,可得機器單精度下“大數吃小數”界限的統一近似公式.

結論2 在機器單精度下進行運算,對于任意符號相同的兩實數a與b,當且僅當|b|≤ca時,機器運算結果為a+b=a,其中

表3給出對于隨機選出的不同“大數”a,可被其“吃掉”的最大“小數”ca的數值試驗值與由式(4)計算出的近似值ca的比較結果,這些結果說明式(4)有良好的估計效果.

表3 機器單精度下ca試驗值與式(4)近似值ca比較結果Tab.3 Comparison between caand cafor random,under single machine precision

3 任意機器精度“大數吃小數”界限的普適近似公式

公式(3)與公式(4)非常相似,只有指數上的一個常系數不同,單精度為7.225,雙精度為15.955.若記所選機器精度的二進制有效位數為n,則機器單雙精度下n分別為24和53[4].注意到24lg 2≈7.224 7,53lg 2≈15.954 6,也就是說,此常系數可由n近似推算出來,為nlg 2,由此推測CA與ca的近似表達式與n有關.因此,在具有n位二進制有效數字的機器下進行運算,將被“大數”a“吃掉”的“小數”界限記為ca,n,結合結論1和結論2,得任意機器精度下“大數吃小數”界限的普適近似公式.

結論3 在具有n位二進制有效數字的機器精度下進行運算,對于任意符號相同的兩實數a與b,當且僅當|b|≤ca,n時,機器運算結果為 a+b=a,其中

4 結論

通過數值試驗,為數值運算中避免“大數吃小數”現象給出了界限,結論3適用于任意機器精度和任意計算機語言,可方便應用于實際的數值計算中.下一步考慮利用二進制對位相加過程[5],對于“大數吃小數”問題進行理論分析,并給出更為嚴格的理論界限.

另外,關于“大數吃小數”現象,本文只討論了同號的情況,可應用類似的方法研究兩異號數相加的情況,找到“大數吃小數”現象發生的統一界限公式.

[1]劉目樓,汪卉琴.數值分析[M].北京:冶金工業出版社,2005.

[2]李慶揚,王能超,易大義.數值分析[M].北京:清華大學出版社,2008.

[3]徐士良.計算機常用算法[M].北京:清華大學出版社,2005.

[4]朱亞超.基于IEEE754的浮點數存儲格式分析研究[J].計算機與信息技術,2006(9):50-52.

[5]GOLDBERGD.ComputerArithmetic[M].Amsterdam:ElsevierScience,2003.

猜你喜歡
大數界限小數
界限
小數加減“四不忘”
間隙
我國古代的小數
小數的認識
小數的認識
“大數的認識”的診斷病歷
破次元
超級英雄教你大數的認識
看看德國人的家庭界限感
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合