This is a creation in Article, where the information may have evolved or changed.
Find Pi (Go language implementation)
The PI algorithm comes from the Leibniz formula, the efficiency is very low and the accuracy is not enough, the following is the operation result:
[' Go run Demo.go ' | done:5m12.5903356s] (that is, it runs for 5 minutes and 12 seconds) [3 1 4 1 5 9 2 5 5 3 5 8 9 7 9 3 2 3 8 4 6 2 8 9 3 3 8 3 2 7 9 5 0 2 8 8 1 0 7 2 1 6 9 3 9 9 3 7 5 2 0 1 1 3 3 4 7 4 9 4 4 5 8 6 8 9 7 6 6 0 1 5 6 2 8 6 7 0 2 3 6 7 7 7 5 9 3 5 6 6 4 3 4 3 5 1 8 1 8 1 6 1 1 5 1 3 8 7 6 7 6 2 8 9 8 7 1 5 9 6 1 0 9 0 7 7 9 8 7 4 9 4 3 6 2 5 1 9 9 3 2 1 5 4 2 6 2 9 2 1 8 4 0 5 2 5 6 8 5 7 3 8 9 1 1 1 8 8 9 3 6 8 6 4 4 9 7 9 5 6 7 2 2 3 0 8 4 0 6 9 0 6 6 8 7 5 2 6 0 9 6 5 5 2 6 6 4 6 0 4 3 0 9 0 6 8 7 1 1 9 1 8 5 0 8 0 3 2 3 7 1 1 5 4 4 9 1 0 2 9 6 8 4 4 9 5 9 4 0 4 7 0 6 6 6 7 2 4 7 3 4 0 7 3 9 0 7 6 4 3 8 3 7 4 4 4 6 8 0 7 6 2 6 4 5 2 3 8 7 5 3 6 5 5 6 9 8 9 1 6 4 2 6 9 8 6 8 4 0 7 7 4 0 9 2 5 9 9 6 4 3 6 2 5 7 6 1 1 3 0 7 9 8 4 6 4 1 6 1 7 2 1 7 2 6 5 4 0 2 2 2 6 0 7 6 8 2 4 4 9 4 6 6 0 8 1 5 2 4 1 2 0 3 2 9 6 8 6 0 8 5 0 4 3 6 3 0 7 1 4 7 7 0 9 4 7 4 7 2 2 2 2 7 2 1 7 5 2 3 4 7 8 8 6 9 3 2 6 8 0 9 1 4 3 5 3 8 9 4 3 2 8 7 8 5 4 56 9 4 4 1 6 4 2 7 3 5 8 4 7 1 9 6 7 6 1 2 1 6 8 1 6 6 0 0 4 8 2 6 2 0 5 4 5 3 1 4 5 7 5 1 1 4 3 7 6 4 0 3 5 3 7 7 6 4 4 5 1 8 0 3 6 9 8 9 7 8 3 2 5 4 1 6 4 5 2 0 2 6 6 3 0 9 3 2 1 6 4 1 0 4 6 0 0 8 2 0 0 9 0 2 1 5 6 8 7 0 3 5 8 8 1 4 6 7 6 6 9 1 9 7 4 6 4 5 6 0 2 3 5 5 0 6 2 4 9 4 4 2 6 4 6 6 3 4 7 9 0 3 0 0 8 1 5 8 3 6 5 1 3 2 9 3 8 2 8 1 0 8 7 9 2 2 1 3 6 4 0 8 1 6 0 5 5 7 2 6 0 6 3 9 4 3 5 1 3 9 8 5 6 7 9 6 8 4 5 9 0 8 3 5 0 3 9 7 1 3 9 8 4 8 7 9 2 4 7 2 9 7 8 2 1 6 6 1 5 6 7 2 8 8 1 3 9 1 2 3 7 0 5 1 9 2 6 6 8 3 6 1 9 0 3 4 0 4 0 7 3 2 8 9 5 2 2 1 3 8 9 8 7 7 0 5 1 0 1 1 2 8 5 1 8 8 6 3 9 3 8 7 3 2 9 4 7 5 3 6 8 1 1 0 1 8 4 8 4 8 9 2 8 5 1 3 3 5 4 0 6 4 0 9 7 3 0 2 4 4 4 2 4 2 0 4 0 1 7 0 9 6 6 0 0 7 5 9 7 7 0 8 1 1 1 5 1 6 5 9 0 1 4 3 3 9 7 8 9 0 2 3 3 8 2 6 3 3 1 8 2 5 9 5 2 6 0 8 0 5 5 8 8 6 3 8 7 2 2 4 9 8 2 7 5 8 2 3 7 2 8 3 0 7 1 7 1 1 7 6 7 1 6 8 4 1 2 6 2 2 4 4 3 1 3 8 8 3 5 8 6 5) 2 88 9 8 5 2 3 0 2 6 3 6 7 8 0 3 1 1 6 3 9 9 6 5 0 9 6 5 2]
go language Implementation code:
Package Mainimport ("FMT") type myInt int32const (SIZE = 120//array length data length less than: 120*9times = 10000000//number of iterations presize = 1000//number of significant digits)/** code Author: Days of * Blog: http://blog.csdn.net/WAPWO?viewmode=contents */func Main () {res, bRes: = Make ([]byte, PR Esize), make ([]byte, Presize) Rab (res, bRes) int4res (res) FMT. Println ("\ n", res)}/* Pi 4*[1-1/3+1/5-1/7+ ...] */func rab (res, bRes []byte) {Intdiv (2, 3, res) var x myInt = 5for I: = 2; i < times; i++ {intdiv (1, x, bRes) if i&1 = = 0 {intsum (res, bRes)} else {intdif (res, bRes)}x + = 2}}/* four times times Sum*/func int4res (res []byte) {tmp: = make ([]byte, Presize) c Pybytearr (TMP, RES) intsum (res, TMP) intsum (RES, TMP) intsum (RES, TMP)}/* summing value res=res-bres (because it is known that it will not overflow) */func intsum (res, BRes []byte) {var count bytefor i: = PRESIZE-1; I >= 0; i--{count = Res[i] + bres[i]if count >= {res[i-1] + = 1 Res[i] = count-10} else {Res[i] = count}}}/* Differential value res=res-bres (because it is known that it will not overflow) */func intdif (res, bRes []byte) {var J intfo R I: = PRESIZE-1; I >= 0; i--{if Res[i] < Bres[i] {for j = i-1; Res[j] = = 0; j--{res[j] = 9}res[j]-= 1res[i] = res[i]-bres[i] + ten} else {Res[i] = Res[i]-bres[i]}}}/* divisor res=a/b */func Intdiv (A, b myInt, res []byte) {var count bytefor I: = 0; i < presize; i++ {count = (byte) (A/b) if Count = = 0 {a *= 10res[i] = 0} else {a%= ba *= 10res[i] = Count}}} /* Copy integer array */func cpybytearr (d, S []byte) {for i: = 0; i < presize; i++ {d[i] = s[i]}}