阿基米德求圓周率的更精確近似值的方法,體現在他的一篇論文《圓的測定》之中。
在這一書(shū)中,阿基米德第一次創(chuàng )用上、下界來(lái)確定 π 的近似值,他用幾何方法證明了“圓周長(cháng)與圓直徑之比小于 3+(1/7) 而大于 3 + (10/71) ”,他還提供了誤差的估計。重要的是,這種方法從理論上而言,能夠求得圓周率的更準確的值。
到公元150年左右,希臘天文學(xué)家托勒密得出 π =3.1416,取得了自阿基米德以來(lái)的巨大進(jìn)步。 圓周率是一個(gè)極其馳名的數。
從有文字記載的歷史開(kāi)始,這個(gè)數就引進(jìn)了外行人和學(xué)者們的興趣。作為一個(gè)非常重要的常數,圓周率最早是出于解決有關(guān)圓的計算問(wèn)題。
僅憑這一點(diǎn),求出它的盡量準確的近似值,就是一個(gè)極其迫切的問(wèn)題了。事實(shí)也是如此,幾千年來(lái)作為數學(xué)家們的奮斗目標,古今中外一代一代的數學(xué)家為此獻出了自己的智慧和勞動(dòng)。
回顧歷史,人類(lèi)對 π 的認識過(guò)程,反映了數學(xué)和計算技術(shù)發(fā)展情形的一個(gè)側面。 π 的研究,在一定程度上反映這個(gè)地區或時(shí)代的數學(xué)水平。
德國數學(xué)史家康托說(shuō):“歷史上一個(gè)國家所算得的圓周率的準確程度,可以作為衡量這個(gè)國家當時(shí)數學(xué)發(fā)展水平的指標。”直到19世紀初,求圓周率的值應該說(shuō)是數學(xué)中的頭號難題。
為求得圓周率的值,人類(lèi)走過(guò)了漫長(cháng)而曲折的道路,它的歷史是饒有趣味的。我們可以將這一計算歷程分為幾個(gè)階段。
圓周率是指平面上圓的周長(cháng)與直徑之比 (ratio of the circumference of a circle to the diameter) 。
用符號π(讀音:pài)表示。中國古代有圓率、周率、周等名稱(chēng)。
(在一般計算時(shí)π=3.14) 圓周率的歷史 古希臘歐幾里得《幾何原本》(約公元前3世紀初)中提到圓周率是常數,中國古算書(shū)《周髀算經(jīng)》( 約公元前2世紀)中有“徑一而周三”的記載,也認為圓周率是常數。歷史上曾采用過(guò)圓周率的多種近似值,早期大都是通過(guò)實(shí)驗而得到的結果,如古埃及紙草書(shū)(約公元前1700)中取π=(4/3)^4≈3.1604 。
第一個(gè)用科學(xué)方法尋求圓周率數值的人是阿基米德,他在《圓的度量》(公元前3世紀)中用圓內接和外切正多邊形的周長(cháng)確定圓周長(cháng)的上下界,從正六邊形開(kāi)始,逐次加倍計算到正96邊形,得到(3+(10/71))<π<(3+(1/7)) ,開(kāi)創(chuàng )了圓周率計算的幾何方法(亦稱(chēng)古典方法,或阿基米德方法),得出精確到小數點(diǎn)后兩位的π值。中國數學(xué)家劉徽在注釋《九章算術(shù)》(263年)時(shí)只用圓內接正多邊形就求得π的近似值,也得出精確到兩位小數的π值,他的方法被后人稱(chēng)為割圓術(shù)。
他用割圓術(shù)一直算到圓內接正192邊形。南北朝時(shí)代數學(xué)家祖沖之進(jìn)一步得出精確到小數點(diǎn)后7位的π值(約5世紀下半葉),給出不足近似值3.1415926和過(guò)剩近似值3.1415927,還得到兩個(gè)近似分數值,密率355/113和約率22/7。
其中的密率在西方直到1573才由德國人奧托得到,1625年發(fā)表于荷蘭工程師安托尼斯的著(zhù)作中,歐洲稱(chēng)之為安托尼斯率。阿拉伯數學(xué)家卡西在15世紀初求得圓周率17位精確小數值,打破祖沖之保持近千年的紀錄。
德國數學(xué)家柯倫于1596年將π值算到20位小數值,后投入畢生精力,于1610年算到小數后35位數,該數值被用他的名字稱(chēng)為魯道夫數。 1579年法國數學(xué)家韋達給出π的第一個(gè)解析表達式。
此后,無(wú)窮乘積式、無(wú)窮連分數、無(wú)窮級數等各種π值表達式紛紛出現,π值計算精度也迅速增加。1706年英國數學(xué)家梅欽計算π值突破100位小數大關(guān)。
1873 年另一位英國數學(xué)家尚可斯將π值計算到小數點(diǎn)后707位,可惜他的結果從528位起是錯的。到1948年英國的弗格森和美國的倫奇共同發(fā)表了π的808位小數值,成為人工計算圓周率值的最高紀錄。
電子計算機的出現使π值計算有了突飛猛進(jìn)的發(fā)展。1949年美國馬里蘭州阿伯丁的軍隊彈道研究實(shí)驗室首次用計算機(ENIAC)計算π值,一下子就算到2037位小數,突破了千位數。
1989年美國哥倫比亞大學(xué)研究人員用克雷-2型和IBM-VF型巨型電子計算機計算出π值小數點(diǎn)后4.8億位數,后又繼續算到小數點(diǎn)后10.1億位數,創(chuàng )下新的紀錄。除π的數值計算外,它的性質(zhì)探討也吸引了眾多數學(xué)家。
1761年瑞士數學(xué)家蘭伯特第一個(gè)證明π是無(wú)理數。1794年法國數學(xué)家勒讓德又證明了π2也是無(wú)理數。
到1882年德國數學(xué)家林德曼首次證明了π是超越數,由此否定了困惑人們兩千多年的「化圓為方」尺規作圖問(wèn)題。還有人對π的特征及與其它數字的聯(lián)系進(jìn)行研究。
如1929年蘇聯(lián)數學(xué)家格爾豐德證明了eπ 是超越數等等。圓周率的計算 古今中外,許多人致力于圓周率的研究與計算。
為了計算出圓周率的越來(lái)越好的近似值,一代代的數學(xué)家為這個(gè)神秘的數貢獻了無(wú)數的時(shí)間與心血。十九世紀前,圓周率的計算進(jìn)展相當緩慢,十九世紀后,計算圓周率的世界紀錄頻頻創(chuàng )新。
整個(gè)十九世紀,可以說(shuō)是圓周率的手工計算量最大的世紀。進(jìn)入二十世紀,隨著(zhù)計算機的發(fā)明,圓周率的計算有了突飛猛進(jìn)。
借助于超級計算機,人們已經(jīng)得到了圓周率的2061億位精度。歷史上最馬拉松式的計算,其一是德國的Ludolph Van Ceulen,他幾乎耗盡了一生的時(shí)間,計算到圓的內接正262邊形,于1609年得到了圓周率的35位精度值,以至于圓周率在德國被稱(chēng)為L(cháng)udolph數;其二是英國的William Shanks,他耗費了15年的光陰,在1874年算出了圓周率的小數點(diǎn)后707位。
可惜,后人發(fā)現,他從第528位開(kāi)始就算錯了。把圓周率的數值算得這么精確,實(shí)際意義并不大。
現代科技領(lǐng)域使用的圓周率值,有十幾位已經(jīng)足夠了。如果用Ludolph Van Ceulen算出的35位精度的圓周率值,來(lái)計算一個(gè)能把太陽(yáng)系包起來(lái)的一個(gè)圓的周長(cháng),誤差還不到質(zhì)子直徑的百萬(wàn)分之一。
以前的人計算圓周率,是要探究圓周率是否循環(huán)小數。自從1761年Lambert證明了圓周率是無(wú)理數,1882年Lindemann證明了圓周率是超越數后,圓周率的神秘面紗就被揭開(kāi)了。
現在的人計算圓周率, 多數是為了驗證計算機的計算能力,還有,就是為了興趣。圓周率的計算方法 古人計算圓周率,一般是用割圓法。
即用圓的內接或外切正多邊形來(lái)逼近圓的周長(cháng)。Archimedes用正96邊形得到圓周率小數點(diǎn)后3位的精度;劉徽用正3072邊形得到5位精度;Ludolph Van Ceulen用正262邊形得到了35位精度。
這種基于幾何的算法計算量大,速度慢,吃力不討好。隨著(zhù)數學(xué)的發(fā)展,數學(xué)家們在進(jìn)行數學(xué)研究時(shí)有意無(wú)意地發(fā)現了許多計算圓周率的公式。
下面挑選一些經(jīng)典的常用公式加以介紹。除了這些經(jīng)典公式外,還有很多其它公式和由這些經(jīng)典公式衍生出來(lái)的公式,就不一一列舉了。
1、Machin公式 [這個(gè)公式由英國天文學(xué)教授John 。
圓周率的發(fā)展史
在歷史上,有不少數學(xué)家都對圓周率作出過(guò)研究,當中著(zhù)名的有阿基米德(Archimedes of Syracuse)、托勒密(Claudius Ptolemy)、張衡、祖沖之等。他們在自己的國家用各自的方法,辛辛苦苦地去計算圓周率的值。下面,就是世上各個(gè)地方對圓周率的研究成果。
亞洲
中國:
魏晉時(shí),劉徽曾用使正多邊形的邊數逐漸增加去逼近圓周的方法(即「割圓術(shù)」),求得π的近似值3.1416。
漢朝時(shí),張衡得出π的平方除以16等於5/8,即π等於10的開(kāi)方(約為3.162)。雖然這個(gè)值不太準確,但它簡(jiǎn)單易理解,所以也在亞洲風(fēng)行了一陣。
王蕃(229-267)發(fā)現了另一個(gè)圓周率值,這就是3.156,但沒(méi)有人知道他是如何求出來(lái)的。
公元5世紀,祖沖之和他的兒子以正24576邊形,求出圓周率約為355/113,和真正的值相比,誤差小於八億分之一。這個(gè)紀錄在一千年后才給打破。
印度:
約在公元530年,數學(xué)大師阿耶波多利用384邊形的周長(cháng),算出圓周率約為√9.8684。
婆羅門(mén)笈多采用另一套方法,推論出圓周率等於10的平方根。
歐洲
斐波那契算出圓周率約為3.1418。
韋達用阿基米德的方法,算出3.1415926535<;π<3.1415926537
他還是第一個(gè)以無(wú)限乘積敘述圓周率的人。
魯道夫萬(wàn)科倫以邊數多過(guò)32000000000的多邊形算出有35個(gè)小數位的圓周率。
華理斯在1655年求出一道公式π/2=2*2*4*4*6*6*8*8。../3*3*5*5*7*7*9*9。。
歐拉發(fā)現的 e的iπ次方加1等於0,成為證明π是超越數的重要依據。
之后,不斷有人給出反正切公式或無(wú)窮級數來(lái)計算π,在這里就不多說(shuō)了。
由于祖沖之所著(zhù)的數學(xué)專(zhuān)著(zhù)《綴術(shù)》已經(jīng)失傳,《隋書(shū)》又沒(méi)有具體地記載他求圓周率的方法,因此,我國研究祖國數學(xué)遺產(chǎn)的專(zhuān)家們,對于他求圓周率的方法還有不同的見(jiàn)解。
有人認為祖沖之圓周率中的“朒數”。是用作圓的內接正多邊形的方法求得的;而“盈數”則是用作圓的外切正多邊形的方法求得的。祖沖之如果繼續用劉徽的辦法,從圓的內接正六邊形算起,逐次加倍邊數,一直算到內接正24576邊形時(shí),它的各邊長(cháng)度總和只能逐次接近并較小于圓周的周長(cháng),這正多邊形的面積也只能逐次接近并較小于圓面積,從此求出的圓周率為3.14159261,也只能小于圓周率的真實(shí)數值,這就是朒 數。從祖沖之的數學(xué)水平來(lái)看,突破劉徽的方法,從外切正六邊形算起,逐次試求圓周率,也是可能的。如果祖沖之把外切正六邊形的邊數成倍增加,到正24576邊形時(shí),他所求得的圓周率應該是3.14159270208。這個(gè)數是用外切方法求得的。由于外切正多邊形各邊邊長(cháng)的總和永遠大于圓周的長(cháng)度,這正多邊形的面積也永遠大于圓面積,所以這個(gè)數總比真實(shí)的圓周率大。用四舍五入法舍去小數點(diǎn)七位以后的數字,就得出盈數。
祖沖之究竟是否同時(shí)用過(guò)內接和外切這兩個(gè)方法求出圓周率的朒數和盈數,是沒(méi)有確切史料可以證實(shí)的。但是采用這個(gè)辦法所求出的朒、盈兩個(gè)數值,和祖沖之原來(lái)所求出的結果大體是一致的。所以有些數學(xué)史家認為祖沖之曾用過(guò)作圓的外切正多邊形的方法求得圓周率,是很近情理的推想。
但是根據另一些數學(xué)史家的研究,盈、朒兩數也可以由計算圓內接正12288邊形和正24576邊形的邊長(cháng)而得出來(lái)。不過(guò)這種計算比較難懂,這里不說(shuō)了。
盡管說(shuō)法有出入,但是祖沖之曾經(jīng)求得“密率”,并且明確地用上、下兩限來(lái)說(shuō)明圓周率這個(gè)數值的范圍,是可以肯定的。在一千五百年前,他有這樣的成就和認識,真值得我們欽佩。
在推算圓周率時(shí),祖沖之付出了不知多少辛勤的勞動(dòng)。如果從正六邊形算起,算到24576邊時(shí),就要把同一運算程序反復進(jìn)行十二次,而且每一運算程序又包括加減乘除和開(kāi)方等十多個(gè)步驟。我們現在用紙筆算盤(pán)來(lái)進(jìn)行這樣的計算,也是極其吃力的。當時(shí)祖沖之進(jìn)行這樣繁難的計算,只能用籌碼(小竹棍)來(lái)逐步推演。如果頭腦不是十分冷靜精細,沒(méi)有堅韌不拔的毅力,是絕對不會(huì )成功的。祖沖之頑強刻苦的研究精神,是很值得推崇的。
由于祖沖之所著(zhù)的數學(xué)專(zhuān)著(zhù)《綴術(shù)》已經(jīng)失傳,《隋書(shū)》又沒(méi)有具體地記載他求圓周率的方法,因此,我國研究祖國數學(xué)遺產(chǎn)的專(zhuān)家們,對于他求圓周率的方法還有不同的見(jiàn)解.有人認為祖沖之圓周率中的“朒數”.是用作圓的內接正多邊形的方法求得的;而“盈數”則是用作圓的外切正多邊形的方法求得的.祖沖之如果繼續用劉徽的辦法,從圓的內接正六邊形算起,逐次加倍邊數,一直算到內接正24576邊形時(shí),它的各邊長(cháng)度總和只能逐次接近并較小于圓周的周長(cháng),這正多邊形的面積也只能逐次接近并較小于圓面積,從此求出的圓周率為3.14159261,也只能小于圓周率的真實(shí)數值,這就是朒 數.從祖沖之的數學(xué)水平來(lái)看,突破劉徽的方法,從外切正六邊形算起,逐次試求圓周率,也是可能的.如果祖沖之把外切正六邊形的邊數成倍增加,到正24576邊形時(shí),他所求得的圓周率應該是3.14159270208.這個(gè)數是用外切方法求得的.由于外切正多邊形各邊邊長(cháng)的總和永遠大于圓周的長(cháng)度,這正多邊形的面積也永遠大于圓面積,所以這個(gè)數總比真實(shí)的圓周率大.用四舍五入法舍去小數點(diǎn)七位以后的數字,就得出盈數.祖沖之究竟是否同時(shí)用過(guò)內接和外切這兩個(gè)方法求出圓周率的朒數和盈數,是沒(méi)有確切史料可以證實(shí)的.但是采用這個(gè)辦法所求出的朒、盈兩個(gè)數值,和祖沖之原來(lái)所求出的結果大體是一致的.所以有些數學(xué)史家認為祖沖之曾用過(guò)作圓的外切正多邊形的方法求得圓周率,是很近情理的推想.但是根據另一些數學(xué)史家的研究,盈、朒兩數也可以由計算圓內接正12288邊形和正24576邊形的邊長(cháng)而得出來(lái).不過(guò)這種計算比較難懂,這里不說(shuō)了.盡管說(shuō)法有出入,但是祖沖之曾經(jīng)求得“密率”,并且明確地用上、下兩限來(lái)說(shuō)明圓周率這個(gè)數值的范圍,是可以肯定的.在一千五百年前,他有這樣的成就和認識,真值得我們欽佩.在推算圓周率時(shí),祖沖之付出了不知多少辛勤的勞動(dòng).如果從正六邊形算起,算到24576邊時(shí),就要把同一運算程序反復進(jìn)行十二次,而且每一運算程序又包括加減乘除和開(kāi)方等十多個(gè)步驟.我們現在用紙筆算盤(pán)來(lái)進(jìn)行這樣的計算,也是極其吃力的.當時(shí)祖沖之進(jìn)行這樣繁難的計算,只能用籌碼(小竹棍)來(lái)逐步推演.如果頭腦不是十分冷靜精細,沒(méi)有堅韌不拔的毅力,是絕對不會(huì )成功的.祖沖之頑強刻苦的研究精神,是很值得推崇的.。
這個(gè)比較難懂,我補充個(gè)別人的解釋吧 ———————————————————— 一、源程序 本文分析下面這個(gè)很流行的計算PI的小程序。
下面這個(gè)程序初看起來(lái)似乎摸不到頭腦, 不過(guò)不用擔心,當你讀完本文的時(shí)候就能夠基本讀懂它了。 程序一:很牛的計算Pi的程序 int a=10000,b,c=2800,d,e,f[2801],g; main() { for(;b-c;) f[b++]=a/5; for(;d=0,g=c*2;c -=14,printf("%.4d",e+d/a),e=d%a) for(b=c; d+=f[b]*a,f[b]=d%--g,d/=g--,--b; d*=b); } 二、數學(xué)公式 數學(xué)家們研究了數不清的方法來(lái)計算PI,這個(gè)程序所用的公式如下: 1 2 3 k pi = 2 + --- * (2 + --- * (2 + --- * (2 + 。
(2 + ---- * (2 + 。 ))。
))) 3 5 7 2k+1 至于這個(gè)公式為什么能夠計算出PI,已經(jīng)超出了本文的能力范圍。 下面要做的事情就是要分析清楚程序是如何實(shí)現這個(gè)公式的。
我們先來(lái)驗證一下這個(gè)公式: 程序二:Pi公式驗證程序 #include "stdio.h" void main() { float pi=2; int i; for(i=100;i>=1;i--) pi=pi*(float)i/(2*i+1)+2; printf("%f\n",pi); getchar(); } 上面這個(gè)程序的結果是3.141593。 三、程序展開(kāi) 在正式分析程序之前,我們需要對程序一進(jìn)行一下展開(kāi)。
我們可以看出程序一都是使用 for循環(huán)來(lái)完成計算的,這樣做雖然可以使得程序短小,但是卻很難讀懂。根據for循環(huán) 的運行順序,我們可以把它展開(kāi)為如下while循環(huán)的程序: 程序三:for轉換為while之后的程序 int a=10000,b,c=2800,d,e,f[2801],g; main() { int i; for(i=0;i<c;i++) f[i]=a/5; while(c!=0) { d=0; g=c*2; b=c; while(1) { d=d+f[b]*a; g--; f[b]=d%g; d=d/g; g--; b--; if(b==0) break; d=d*b; } c=c-14; printf("%.4d",e+d/a); e=d%a; } } 注: for([1];[2];[3]) {[4];} 的運行順序是[1],[2],[4],[3]。
如果有逗號操作符,例如:d=0,g=c*2,則先運行d=0, 然后運行g(shù)=c*2,并且最終的結果是最后一個(gè)表達式的值,也就是這里的c*2。 下面我們就針對展開(kāi)后的程序來(lái)分析。
四、程序分析 要想計算出無(wú)限精度的PI,我們需要上述的迭代公式運行無(wú)數次,并且其中每個(gè)分數也 是完全精確的,這在計算機中自然是無(wú)法實(shí)現的。那么基本實(shí)現思想就是迭代足夠多次 ,并且每個(gè)分數也足夠精確,這樣就能夠計算出PI的前n位來(lái)。
上面這個(gè)程序計算800位 ,迭代公式一共迭代2800次。 int a=10000,b,c=2800,d,e,f[2801],g; 這句話(huà)中的2800就是迭代次數。
由于float或者double的精度遠遠不夠,因此程序中使用整數類(lèi)型(實(shí)際是長(cháng)整型),分 段運算(每次計算4位)。我們可以看到輸出語(yǔ)句 printf("%.4d",e+d/a); 其中%.4就是 把計算出來(lái)的4位輸出,我們看到c每次減少14( c=c-14;),而c的初始大小為2800,因 此一共就分了200段運算,并且每次輸出4位,所以一共輸出了800位。
由于使用整型數運算,因此有必要乘上一個(gè)系數,在這個(gè)程序中系數為1000,也就是說(shuō) ,公式如下: 1 2 3 k 1000*pi = 2k+ --- * (2k+ --- * (2k+ --- * (2k+ 。 (2k+ ---- * (2k+ 。
)). ..))) 3 5 7 2k+1 這里的2k表示2000,也就是f[2801]數組初始化以后的數據,a=10000,a/5=2000,所以下面 的程序把f中的每個(gè)元素都賦值為2000: for(i=0;i<c;i++) f[i]=a/5; 你可能會(huì )覺(jué)得奇怪,為什么這里要把一個(gè)常數儲存到數組中去,請繼續往下看。 我們先來(lái)跟蹤一下程序的運行: while(c!=0) 假設這是第一次運行,c=2800,為迭代次數 { d=0; g=c*2; 這里的g是用來(lái)做k/(2k+1)中的分子 b=c; 這里的b是用來(lái)做k/(2k+1)中的分子 while(1) { d=d+f[b]*a; f中的所有的值都為2000,這里在計算時(shí)又把系數擴大了 a=10000倍。
這樣做的目的稍候介紹,你可以看到 輸出的時(shí)候是d/a,所以這不影 計算 g--; f[b]=d%g; 先不管這一行 d=d/g; 第一次運行的g為2*2799+1,你可以看到g做了分母 g--; b--; if(b==0) break; d=d*b; 這里的b為2799,可以看到d做了分子。 } c=c-14; printf("%.4d",e+d/a); e=d%a; } 只需要粗略的看看上面的程序,我們就大概知道它的確是使用的那個(gè)迭代公式來(lái)計算Pi 的了,不過(guò)不知道到現在為止你是否明白了f數組的用處。
如果沒(méi)有明白,請繼續閱讀。 d=d/g,這一行的目的是除以2k+1,我們知道之所以程序無(wú)法精確計算的原因就是這個(gè)除 法。
即使用浮點(diǎn)數,答案也是不夠精確的,因此直接用來(lái)計算800位的Pi是不可能的。那 么不精確的成分在哪里?很明顯:就是那個(gè)余數d%g。
程序用f數組把這個(gè)誤差儲存起來(lái) ,再下次計算的時(shí)候使用。現在你也應該知道為什么d=d+f[b]*a;中間需要乘上a了吧。
把分子擴大之后,才好把誤差精確的算出來(lái)。 d如果不乘10000這個(gè)系數,則其值為2000,那么運行d=d/g;則是2000/(2*2799+1),這 種整數的除法答案為0,根本無(wú)法迭代下去了。
現在我們知道程序就是把余數儲存起來(lái),作為下次迭代的時(shí)候的參數,那么為什么這么 做就可以使得下次迭代出來(lái)的結果為 接下來(lái)的4位數呢? 這實(shí)際上和我們在紙上作除法很類(lèi)似: 0142 /——------ 7 / 1 10 7 --------------- 30 28 --------------- 20 14 --------------- 60 。.. 我們可以發(fā)現,在做除法的時(shí)候,我們通常把余數擴大之后再來(lái)計算,f中既然儲存的是 余數,而f[b]*a;則正好把這個(gè)余數擴大了a倍,然后如此循環(huán)下去,可以計算到任意精 度。
這里要說(shuō)明的是,事實(shí)上每次計算出來(lái)的d并不一定只。
聲明:本網(wǎng)站尊重并保護知識產(chǎn)權,根據《信息網(wǎng)絡(luò )傳播權保護條例》,如果我們轉載的作品侵犯了您的權利,請在一個(gè)月內通知我們,我們會(huì )及時(shí)刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學(xué)習?shū)B(niǎo). 頁(yè)面生成時(shí)間:2.431秒