李 鑫,王 璐,林金花,韓 冬,谷德山
(1.長春工業(yè)大學(xué)軟件職業(yè)技術(shù)學(xué)院,吉林長春 130012; 2.東北師范大學(xué)物理學(xué)院,吉林長春 130024)
4種計算自然常數(shù)e的方法及精度比較
李 鑫1,2,王 璐1,林金花1,韓 冬1,谷德山2
(1.長春工業(yè)大學(xué)軟件職業(yè)技術(shù)學(xué)院,吉林長春 130012; 2.東北師范大學(xué)物理學(xué)院,吉林長春 130024)
用V isual C++6.0語言設(shè)計了3種計算方法:利用極限、級數(shù)、積分計算自然常數(shù)e的值.經(jīng)過不斷改進(jìn),讓計算機按照人的思維方式對e的值進(jìn)行了計算.計算結(jié)果表明:利用極限計算的e值能精確到小數(shù)點后8位;利用級數(shù)和定積分計算的e值精確到小數(shù)點后16位;利用人的思維方式計算e的值能精確到小數(shù)點后800位.
自然常數(shù)e;Visual C++6.0;精度;人的計算方式
假設(shè)投資1元錢在一個銀行賬戶上,每年的年利率為r,每年結(jié)算一次,經(jīng)過t年后,可以拿到的本息為S1=(1+r)t.如果半年結(jié)算一次(即一年結(jié)算2次),本息為S2=(1+r/2)2t.如果一年結(jié)算n次,為了計算方面,假設(shè)r和t都等于1,則本息為Sn=(1+1/n)n.當(dāng)n→∞時,(1+1/n)n=2.718 28….1727年,瑞士數(shù)學(xué)家歐拉用字母e來代表這個數(shù),后來人們把e叫做自然常數(shù),它是一個無理數(shù),也是一個超越數(shù)[1].目前網(wǎng)上能查到e小數(shù)點后2 000位,因此,計算e的本身意義并不大.由于e是一個無理數(shù),通過計算e可以讓我們更深刻地認(rèn)識編程語言中數(shù)字類型所能達(dá)到的精度.
C++語言是當(dāng)今最流行的面向?qū)ο蟪绦蛟O(shè)計語言,而Visual C++是M icrosoft公司開發(fā)的基于Window s操作系統(tǒng)的C++語言程序的可視化編程工具[2],現(xiàn)在流行的版本是Visual C++6.0.雙精度型是它數(shù)字類型中精度最高的,可以精確到小數(shù)點后16位有效數(shù)字.本文分別用極限、級數(shù)和定積分計算e的值,計算結(jié)果的最大精度只能達(dá)到小數(shù)點后16位.為了提高精度,本文讓計算機按照“人的計算方式”計算級數(shù),使e的精度提高到小數(shù)點后800位.
e的計算公式為
Visual C++中的數(shù)字類型主要有整型(int)、實型(float)以及雙精度型(double).整型的取值范圍是-231~231,即-2 147 483 648~2 147 483 647.整型的計算結(jié)果只保留整數(shù)部分,很明顯不適合用此公式計算e的值.實型的取值范圍比較大(-3.4×10-38~3.4×1038),但是它只能保留小數(shù)點后8位有效數(shù)字.雙精度型的取值范圍非常大(-1.7×10-308~1.7×10308),能保留小數(shù)點后17位有效數(shù)字(精確到16位)[3],因此本文在計算e的時候選擇雙精度型.
根據(jù)(1)式,計算e的代碼如下:
本程序執(zhí)行后,e的計算值見表1.由表1可見,利用極限計算e的值只能精確到小數(shù)點后8位,超過8位的數(shù)值與真實值偏差較大.
表1 利用極限計算e的值
通過分析程序和表1,可以得到下面兩個現(xiàn)象:
(1)在程序中,希望e保留到小數(shù)點后20位,但是實際輸出結(jié)果只保留到小數(shù)點后16位;
(2)由(1)式可知,隨著n的增大,e的計算值越接近e的真實值.但由表1中的數(shù)據(jù)可以看出,當(dāng)n≥109后,e的計算值不是接近e的真實值,而是大于真實值.
用M aclaurin公式把f(x)=ex展開,并令x=1,可以得到[4]
(2)式中需要重復(fù)計算整數(shù)的階乘的倒數(shù),可以用Visual C++中的循環(huán)結(jié)構(gòu).這是一個無窮級數(shù),為了節(jié)省時間,本文只計算到n=99,讓輸出結(jié)果保留到16位小數(shù),代碼如下:
這段代碼的運行結(jié)果如表2所示.由表2可以看出,隨著n的增大,e的計算值越來越接近e的真實值.但是,當(dāng)n的值大于17后,計算的精度并沒有提高,原因是雙精度型只能精確到小數(shù)點后16位,對于e來說只能精確到個位以及小數(shù)點后15位,而再往下計算已經(jīng)沒有意義了.
表2 利用級數(shù)計算e的值
通過比較利用極限和利用級數(shù)兩種算法可以看出,解決同一個問題,不同的算法得到的精度是不同的.在公式(1)中和n都只能精確到小數(shù)點后16位,兩者乘方結(jié)果的精度必然下降,由計算結(jié)果可知,只能精確到小數(shù)點后8位.在公式(2)中,每一項都能精確到小數(shù)點后16位,而e是所有項的和,仍然能夠精確到小數(shù)點后16位.所以,在以后的程序編寫中,如果對精度有要求,應(yīng)該盡量使用加、減運算,少用其他的運算(例如乘、除、乘方、對數(shù)等).
由定積分公式可得
在直角坐標(biāo)系中,x=1,y=1/x,x=e,y=0所包圍的面積等于1.在程序編寫中,如果用for循環(huán),必須計算出有多少個面積元,比較麻煩,所以本文采用w hile循環(huán),代碼如下:
計算結(jié)果如表3所示.由表3可以看出,隨著dx取值的減小,e的計算值越來越接近真實值.本文只計算到dx=10-9,原因是這種算法非常費時,dx每小一個數(shù)量級,運行時間就增加10倍.計算機的運行速度雖然快,但不是無限大,在以后的程序設(shè)計中應(yīng)該考慮運行所需的時間.而前兩種及后一種計算方法所需的時間都非常短.另外,dx和x都只能精確到小數(shù)點后16位,它們的商所能精確的位數(shù)應(yīng)該比16小,在往下計算沒有太大的意義.
表3 利用定積分計算e的值
在V isual C++中的數(shù)字類型中,精度最高的是雙精度型,只能精確到小數(shù)點后16位,e的計算值能不能超過16位呢?答案是肯定的.原因是即使沒有計算機,在時間充裕的情況下,只用紙和筆一定能夠得到想要的精度.計算機是我們的工具[5-8],如果讓它按我們的思維方式去計算,也一定能夠得到我們想要的精度.假設(shè)用紙和筆計算e(精確到小數(shù)點后49位),我們一般選擇公式(2),首先計算出,然后最后加1,結(jié)果就是e的計算值.在這個計算過程中,除法和豎式加法都是按照人的思維方式進(jìn)行的,程序代碼如下:
此程序計算出的e值如表4所示,我們想精確到小數(shù)點后49位,實際只精確到小數(shù)點后48位,原因是我們把49位之后的數(shù)字都省略了,被省略的數(shù)字之和可能大于10,應(yīng)該向49位進(jìn)位,從而影響了49位的精度.所以,如果想精確到小數(shù)點后49位,我們應(yīng)該保留到51位.如果感興趣的話,還可以用此方法繼續(xù)往下計算,由于受數(shù)組個數(shù)的限制,最多能夠精確到小數(shù)點后800位.
表4 利用人的思維方式計算e的值
本文用4種方法計算出e的值,由于算法不同,計算的精度也不同.如果讓計算機按照公式去計算, e所能達(dá)到的最大精度為16位.如果讓計算機按照“人的計算方式”去計算,e所能達(dá)到的最大精度為800位,所需的運行時間也非常短.由此可以看出,計算機只是我們的工具,在解決問題時我們應(yīng)該靈活運用這個工具.
[1] 龐榮波.淺談自然常數(shù)e的命名者——歐拉[J].科教文匯,2009(1):274.
[2] 黃全舟.Visual C++技術(shù)特點分析[J].西安石油大學(xué)學(xué)報:自然科學(xué)版,2001,16(1):60-63.
[3] 劉斌,王忠.面向?qū)ο蟪绦蛟O(shè)計——Visual C++[M].北京:清華大學(xué)出版社,2003:3-4.
[4] 同濟大學(xué)數(shù)學(xué)教研室.高等數(shù)學(xué)[M].北京:高等教育出版社,2002:175-176.
[5] 周治國,李文印,李同,等.基于RFID的汽車號牌自動識別系統(tǒng)的安全性設(shè)計[J].東北師大學(xué)報:自然科學(xué)版,2008,40(2): 34-38.
[6] 蒲東兵,塔娜,馬志強,等.一種實用監(jiān)控系統(tǒng)的人臉檢測定位算法[J].東北師大學(xué)報:自然科學(xué)版,2009,41(1):40-43.
[7] 何東曉,周春光,劉淼,等.手寫數(shù)字識別中組合式神經(jīng)網(wǎng)絡(luò)的構(gòu)建方法[J].吉林大學(xué)學(xué)報:理學(xué)版,2009,47(6):1212-1217.
[8] 徐沛娟,李雄飛,惠玥,等.中文文本分類相關(guān)算法的研究與實現(xiàn)[J].吉林大學(xué)學(xué)報:理學(xué)版,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
吉林省科技發(fā)展計劃項目([2005]55).
李鑫(1977—),女,碩士;谷德山(1955—),男,教授,主要從事粒子物理與原子核物理研究.
(責(zé)任編輯:石紹慶)