求圓周率pi的怪異程式 祖沖之圓周率演算法絕技之迷

2021-09-08 21:14:12 字數 3163 閱讀 6456

據說華羅庚曾講過乙個故事,說:有個教書先生喜歡喝酒,一天,他叫學生背圓周率,自己卻提壺酒到山上廟裡找老和尚喝酒去了。有個聰明的學生把圓周率編了個

打油詩「山巔一寺一壺酒,爾樂苦煞吾,把酒吃;酒殺爾殺不死,樂爾樂」。其實是

3.1415926535897932384626

的諧音。先生一回來,學生居然背了下來,可一想,發現學生是在諷刺他。

究其「山巔一寺一壺酒」的來歷,眾所周之,可上溯至南北朝時的祖沖之

(429

—500年)

,當時獲得的結果是圓周率在

3.1415926

與3.1415927

之間。那麼,祖沖之是怎麼算出來的呢?

《隋書·

律曆志》記載,祖沖之所用的方法叫「綴術」,並說祖沖之「所著之書名為《綴術》,學官莫能究其深奧」。傳說唐時此書為朝庭欽定教科書,後來《綴術》失傳。從而祖沖之的神奇演算法成為千古之迷。

作為猜測,華先生曾說「他的演算法也是極限的最好說明,他從單位圓的內接正六邊形和外切正六邊形出發……再作內接的和外切的正

12邊形、正

24邊形……邊數愈多

, 內接的和外切的正6·2

n-1邊形的面積就愈接近圓的面積

,由此可以逐步地精確地算出圓周的長度。」內接和外切正

多邊形的方法是阿基公尺德的「窮竭法」。

但仔細一想,用「窮竭法」來算也是有問題的。要得到祖率的精度,需要算正

24576

邊形,也就是從正六邊形出發要剖分

12次,即同一演算法要迭代

12次,在用算籌的手工年代要完成如此浩大的計算量其困難是很大的,也可能是很能難實現的。

於是,錢寶琮先生在主編《中國數學史》時猜測採用了與劉徽割圓術相仿的方法,錢先生猜測說:「祖沖之鑽研了《九章算術》劉徽注之後,認為數學還應該有所發展,他寫成了數十篇專題**,附綴於劉徽注的後面,叫它『綴述』。」

「綴」有附著之意,故華中王能超先生同意錢先生的觀點,認為「綴術」實際上是《九章算術》劉徽注的「祖沖之注」。但「綴術」決不是「綴述」。

然而,「綴」又有拼合、組合之意,故「綴術」可能是劉徽割圓術的組合之術。

王先生堅信「綴術」是割圓術的組合之術,並由此發現了「綴術」是與當今外推算法相類似的一種加速演算法,祖沖之肯定是用這種加速演算法減少了迭代次數,解決了計算量大的困難。這種加速演算法的智慧型是阿基公尺德窮竭法所不能比的。果真如此的話,王先生就破譯了綴術的千古疑案,所以林群先生講「我認為王教授的發現是數學史上的重大事件」。

那麼,該如何「組合」呢?

從圓內接正六邊形做起,第一次割得正

12邊形,用

s(12)

記其面積,劉徽稱其為「觚之冪」,於是得:

s(12)

,s(24)

,s(48)

,s(96)

,s(192)

,……劉徽稱多邊形的面積為冪,而稱偏差

a(n)=s(2n)-

s(n)

為差冪,並給出了雙側逼近公式,即圓面積介於

s(2n)與

s(2n)+

a(n)

之間,由此給出了乙個計算圓面積的近似例項:

由此得到圓周率為

3.1416

,將此例項寫成公式就是:

圓面積≈

s(2n

)+c[

s(2n)-

s(n)

]即是現代的組合加速技術,其關鍵是係數

c的選取。為此,劉徽在割圓術中說了一句人稱「十字文」的話:「以十二觚之冪為率訊息」,一千多年來讓多少行家費盡思量也不解其迷。王先生從劉徽的思想方式與語言行文特徵出發,認為是人們傳抄之誤,實應為「以十二觚之冪率為訊息」,意為係數

c的訊息在十二觚之冪率中。十二觚之冪率為

d(12)=

a(12)

/a(24)

=[s(24)-

s(12)

]/[s(48)-

s(24)]=

3.95

可得係數c=

1/(3.95-1)

=1/2.95

,這是劉徽的偉大之處,也是劉徽與

3.1415926

失之交臂而把更精緻的結果留給了

200年後的老祖的原因。如果把

d(12)、

d(24)、

d(48)、

d(96

)都算出來,就會發現它們穩定在

4.0上,從而係數c=

1/3。如果取c=

1/3,只需算到正

96邊形的

s(96)和

正192

邊形的s(192

),再利用加速公式就可以得到

3.141592646

,這時只需要迭代

5次而不是

12次,也不需要算到正

24576

邊形,大概這就是老祖的絕技之迷。

西元前300

年,阿基公尺德為得到

3.14

,已經割到正

96邊形了,如果他老先生知道如何跑得快一點就能喝到一壺酒了,沒有離「山巔一寺一壺酒」的一步之遙了。

這一絕技在現代已不重要了,在大學本科的計算方法中只是很簡單的外推加速技術。所以,著名的克萊因在《古今數學思想》自敘稱:「為著不使資料漫無邊際,我忽略了幾種文化,例如中國的文化,因為他們的工作對於數學思想的主流沒有重大的影響。」

如果再問乙個問題:老劉和老祖在那個時代是怎麼想到加速與c=

1/3的?

乙個比較靠得住的猜想是,他們是從數字的分析中直覺地感悟到的,在邏輯上不是從分析邏輯上得到的,而是從直覺邏輯上得到的。有人把這類直覺、感悟叫做智慧型。擅長數學主流分析邏輯的西方數學家伊恩

·斯圖爾特說:「數學的全部力量就在於直覺和嚴格性巧妙地結合在一起。受控制的精神和富有靈感的邏輯正是數學的魅力所在,也是數學教育者努力的方向。」他更是一語道破了數學的真諦:「直覺是真正的數學家賴以生存的東西」。

無獨有偶,迪瓦多內也說:「這些富有創造性的科學家與眾不同的地方,在於他們對研究的物件有乙個活生生的構想和深刻的了解,這些構想和了解結合起來,就是所謂『直覺』」。

也許對數學主流思想產生重大影響的恰好是人類的直覺思維,這才是今天人們仍然尊敬劉徽與祖沖之的原因。

如何讓數學家經常帶點直覺的靈感呢,德國數學家維爾斯特拉斯說:「不帶點詩人味的數學家,絕不是乙個完美的數學家。」

所以,乙個完美而又簡單的修練方法就是到學人亭來。

2004

年,獲王能超先生慧贈《千古絕技「割圓術」——劉徽的大智慧型》,謹以此文答謝。

4 蒙特卡羅演算法求圓周率PI

蒙特卡羅演算法的典型應用之一為求圓周率pi問題。思想 乙個半徑r 1 的圓,其面積為 s pi r 2 pi 4 乙個邊長r 1 的正方形,其面積為 s r2 1 那麼建立乙個座標系,如果均勻的向正方形內撒點,那麼落入圓心在正方形中心,半徑為1的圓內的點數與全部點數的比例應該為pi 4,根據概率統計...

Codeup 求圓周率pi的近似值

用如下公式 求圓周率pi的近似值,直到發現某一項的絕對值小於10 6為止 該項不累加 要求輸出的結果總寬度佔10位,其中小數部分為8位。程式中使用浮點型資料時,請定義為雙精度double型別。如果需要計算絕對值,可以使用c語言數學庫提供的函式fabs,如求x的絕對值,則為fabs x 輸入 無輸出 ...

圓周率PI的高精度計算 C C

某次碰到pi,想用程式設計列印出它的比較多的有效位 至少比背的要多 開始考慮到 pi 4 arctan 1 arctan x 展成多項式 arctan x 1 1 x 1 3 x 3 1 5 x 5 所以有 pi 4 1 1 3 1 5 1 7 但是上式後面的式子收斂太慢了,程式設計很難求到很多的有...