李 鑫,王 璐,林金花,韓 冬,谷德山
(1.長春工業大學軟件職業技術學院,吉林長春 130012; 2.東北師范大學物理學院,吉林長春 130024)
4種計算自然常數e的方法及精度比較
李 鑫1,2,王 璐1,林金花1,韓 冬1,谷德山2
(1.長春工業大學軟件職業技術學院,吉林長春 130012; 2.東北師范大學物理學院,吉林長春 130024)
用V isual C++6.0語言設計了3種計算方法:利用極限、級數、積分計算自然常數e的值.經過不斷改進,讓計算機按照人的思維方式對e的值進行了計算.計算結果表明:利用極限計算的e值能精確到小數點后8位;利用級數和定積分計算的e值精確到小數點后16位;利用人的思維方式計算e的值能精確到小數點后800位.
自然常數e;Visual C++6.0;精度;人的計算方式
假設投資1元錢在一個銀行賬戶上,每年的年利率為r,每年結算一次,經過t年后,可以拿到的本息為S1=(1+r)t.如果半年結算一次(即一年結算2次),本息為S2=(1+r/2)2t.如果一年結算n次,為了計算方面,假設r和t都等于1,則本息為Sn=(1+1/n)n.當n→∞時,(1+1/n)n=2.718 28….1727年,瑞士數學家歐拉用字母e來代表這個數,后來人們把e叫做自然常數,它是一個無理數,也是一個超越數[1].目前網上能查到e小數點后2 000位,因此,計算e的本身意義并不大.由于e是一個無理數,通過計算e可以讓我們更深刻地認識編程語言中數字類型所能達到的精度.
C++語言是當今最流行的面向對象程序設計語言,而Visual C++是M icrosoft公司開發的基于Window s操作系統的C++語言程序的可視化編程工具[2],現在流行的版本是Visual C++6.0.雙精度型是它數字類型中精度最高的,可以精確到小數點后16位有效數字.本文分別用極限、級數和定積分計算e的值,計算結果的最大精度只能達到小數點后16位.為了提高精度,本文讓計算機按照“人的計算方式”計算級數,使e的精度提高到小數點后800位.
e的計算公式為

Visual C++中的數字類型主要有整型(int)、實型(float)以及雙精度型(double).整型的取值范圍是-231~231,即-2 147 483 648~2 147 483 647.整型的計算結果只保留整數部分,很明顯不適合用此公式計算e的值.實型的取值范圍比較大(-3.4×10-38~3.4×1038),但是它只能保留小數點后8位有效數字.雙精度型的取值范圍非常大(-1.7×10-308~1.7×10308),能保留小數點后17位有效數字(精確到16位)[3],因此本文在計算e的時候選擇雙精度型.
根據(1)式,計算e的代碼如下:


本程序執行后,e的計算值見表1.由表1可見,利用極限計算e的值只能精確到小數點后8位,超過8位的數值與真實值偏差較大.

表1 利用極限計算e的值
通過分析程序和表1,可以得到下面兩個現象:
(1)在程序中,希望e保留到小數點后20位,但是實際輸出結果只保留到小數點后16位;
(2)由(1)式可知,隨著n的增大,e的計算值越接近e的真實值.但由表1中的數據可以看出,當n≥109后,e的計算值不是接近e的真實值,而是大于真實值.
用M aclaurin公式把f(x)=ex展開,并令x=1,可以得到[4]

(2)式中需要重復計算整數的階乘的倒數,可以用Visual C++中的循環結構.這是一個無窮級數,為了節省時間,本文只計算到n=99,讓輸出結果保留到16位小數,代碼如下:

這段代碼的運行結果如表2所示.由表2可以看出,隨著n的增大,e的計算值越來越接近e的真實值.但是,當n的值大于17后,計算的精度并沒有提高,原因是雙精度型只能精確到小數點后16位,對于e來說只能精確到個位以及小數點后15位,而再往下計算已經沒有意義了.

表2 利用級數計算e的值
通過比較利用極限和利用級數兩種算法可以看出,解決同一個問題,不同的算法得到的精度是不同的.在公式(1)中和n都只能精確到小數點后16位,兩者乘方結果的精度必然下降,由計算結果可知,只能精確到小數點后8位.在公式(2)中,每一項都能精確到小數點后16位,而e是所有項的和,仍然能夠精確到小數點后16位.所以,在以后的程序編寫中,如果對精度有要求,應該盡量使用加、減運算,少用其他的運算(例如乘、除、乘方、對數等).
由定積分公式可得

在直角坐標系中,x=1,y=1/x,x=e,y=0所包圍的面積等于1.在程序編寫中,如果用for循環,必須計算出有多少個面積元,比較麻煩,所以本文采用w hile循環,代碼如下:

計算結果如表3所示.由表3可以看出,隨著dx取值的減小,e的計算值越來越接近真實值.本文只計算到dx=10-9,原因是這種算法非常費時,dx每小一個數量級,運行時間就增加10倍.計算機的運行速度雖然快,但不是無限大,在以后的程序設計中應該考慮運行所需的時間.而前兩種及后一種計算方法所需的時間都非常短.另外,dx和x都只能精確到小數點后16位,它們的商所能精確的位數應該比16小,在往下計算沒有太大的意義.

表3 利用定積分計算e的值
在V isual C++中的數字類型中,精度最高的是雙精度型,只能精確到小數點后16位,e的計算值能不能超過16位呢?答案是肯定的.原因是即使沒有計算機,在時間充裕的情況下,只用紙和筆一定能夠得到想要的精度.計算機是我們的工具[5-8],如果讓它按我們的思維方式去計算,也一定能夠得到我們想要的精度.假設用紙和筆計算e(精確到小數點后49位),我們一般選擇公式(2),首先計算出,然后最后加1,結果就是e的計算值.在這個計算過程中,除法和豎式加法都是按照人的思維方式進行的,程序代碼如下:


此程序計算出的e值如表4所示,我們想精確到小數點后49位,實際只精確到小數點后48位,原因是我們把49位之后的數字都省略了,被省略的數字之和可能大于10,應該向49位進位,從而影響了49位的精度.所以,如果想精確到小數點后49位,我們應該保留到51位.如果感興趣的話,還可以用此方法繼續往下計算,由于受數組個數的限制,最多能夠精確到小數點后800位.

表4 利用人的思維方式計算e的值
本文用4種方法計算出e的值,由于算法不同,計算的精度也不同.如果讓計算機按照公式去計算, e所能達到的最大精度為16位.如果讓計算機按照“人的計算方式”去計算,e所能達到的最大精度為800位,所需的運行時間也非常短.由此可以看出,計算機只是我們的工具,在解決問題時我們應該靈活運用這個工具.
[1] 龐榮波.淺談自然常數e的命名者——歐拉[J].科教文匯,2009(1):274.
[2] 黃全舟.Visual C++技術特點分析[J].西安石油大學學報:自然科學版,2001,16(1):60-63.
[3] 劉斌,王忠.面向對象程序設計——Visual C++[M].北京:清華大學出版社,2003:3-4.
[4] 同濟大學數學教研室.高等數學[M].北京:高等教育出版社,2002:175-176.
[5] 周治國,李文印,李同,等.基于RFID的汽車號牌自動識別系統的安全性設計[J].東北師大學報:自然科學版,2008,40(2): 34-38.
[6] 蒲東兵,塔娜,馬志強,等.一種實用監控系統的人臉檢測定位算法[J].東北師大學報:自然科學版,2009,41(1):40-43.
[7] 何東曉,周春光,劉淼,等.手寫數字識別中組合式神經網絡的構建方法[J].吉林大學學報:理學版,2009,47(6):1212-1217.
[8] 徐沛娟,李雄飛,惠玥,等.中文文本分類相關算法的研究與實現[J].吉林大學學報:理學版,2009,47(4):792-796.
Four methods of computing e and comparing the precision
L IXin1,2,WANG Lu1,L IN Jin-hua1,HAN Dong1,GU De-shan2
(1.School of Software Vocational Technology,Changchun University of Technology,Changchun 130012,China; 2.School of Physics,Northeast Normal University,Changchun 130024,China)
Three calculation methods were designed by Visual C++6.0.They computed the mathematical constant e respectively by limit,p rogression and integral.A t last,the computer computed e according to human method of computation.The result computed by limit or integral can accurate to 7 decimal p laces.The result computed by p rogression can accurate to 15 decimal p laces.The result computed according to human method of computation can accurate to 800 decimal p laces.
mathematical constant e;Visual C++6.0;p recision;human method of computation
TP274+.2
520·40
A
1000-1832(2010)04-0057-05
2010-09-10
吉林省科技發展計劃項目([2005]55).
李鑫(1977—),女,碩士;谷德山(1955—),男,教授,主要從事粒子物理與原子核物理研究.
(責任編輯:石紹慶)