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