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

2021-06-16 10:17:14 字數 1924 閱讀 6496

某次碰到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 + .....

但是上式後面的式子收斂太慢了,程式設計很難求到很多的有效位,

而後查到machin公式 pi/4 = 4arctan(1/5) - arctan(1/239),這個公式可以自己證明一下(忘的差不多了,塗了半天才算對)

這樣泰勒展開式收斂很快,我就是照著這個公式程式設計的,**如下

#include #include #include #define ks_min(a, b) ((a)

#define ks_max(a, b) ((a)>(b)?(a):(b))

#define bits 20000

typedef struct bigint

~bigint()

}bigint;

// out = in / x;

void division(bigint &out, bigint &in, int x)

for (i = out.l-1; i >= 0; i--)

out.l = i+1;

if (out.l == 0) out.l++;

}// a += b;

void addequal(bigint &a, bigint &b)

}for (i = a.l-1; i >= 0; i--)

a.l = i+1;

if (a.l == 0) a.l++;

}// a -= b;

void subequal(bigint &a, bigint &b)

}for (i = a.l-1; i >= 0; i--)

a.l = i+1;

if (a.l == 0) a.l++;

}// a *= k

void mulequal(bigint &a, int k)

}for (i = a.l-1; i >= 0; i--)

a.l = i+1;

if (a.l == 0) a.l++;

}void bigintcopy(bigint &dst, bigint &src)

void argtanx(bigint &out, int x, int digit)

}void print(bigint &a)

int main(int argc, char *argv)

///* pi/4 = 4*arctan(1/5) - arctan(1/239) */

設要算的有效位數為n,那麼上面時間複雜度大概o(n^2),所有10000位在幾秒鐘內應該能算出來

然後某次網上看到別人寫的**(稍微修改過)

#include #include #define bits 2000

int a=10000,b,c=bits*7/2,d,e,f[bits*7/2+1],g;

int main()

太簡短了!!!然後結果和我上面的對照過,是一致。

從**上看時間複雜度也是o(n^2),真實測時速度比我上面的**要快一些。

還好時間複雜度一致,不至於讓我過分自悲,然後看了半天也不明白它這個是用什麼原理設計的。

而後又查了一些pi的公式

拉馬努金公式 

丘德諾夫斯基簡化版公式

等等,據說上面很多公式(如丘德諾夫斯基)計算pi很快,我其實不太理解怎麼處理那個根號。。。

pi的有效位已經到 萬億位級別

還有乙個bbp的關於pi的.....

好吧,我只能說我真的是過分渺小了。。。。。。

用python計算圓周率PI

向區域內隨即撒點 當點的數目足夠多時,落在圓的點數目與在正方形點數目成正比 即圓的面積和正方形的面積成正比 可以得出計算圓周率的演算法 darts 100000000 hits 0.0 clock fori inrange 1,darts 1 x,y random random dist sqrt ...

如何通過python計算圓周率PI

如下 def pi n pi 0 for k in range n pinforkrptb 程式設計客棧 1 pow 16,k 4 8 k 1 2 8 k 4 1 8 k 5 1 8 k 6 return pi import time scale 20 print 執行開始 center scale...

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

據說華羅庚曾講過乙個故事,說 有個教書先生喜歡喝酒,一天,他叫學生背圓周率,自己卻提壺酒到山上廟裡找老和尚喝酒去了。有個聰明的學生把圓周率編了個 打油詩 山巔一寺一壺酒,爾樂苦煞吾,把酒吃 酒殺爾殺不死,樂爾樂 其實是 3.1415926535897932384626 的諧音。先生一回來,學生居然背...