一般来说 计算机π近似值都是通过 级数的收敛来计算 常见的公式:
1.π=2*22/(1*3) *42/(3*5) *62/(5*7) *… ...
2.π/4=(1-1/3+1/5-1/7+1/9-…)
3.(π^2)/6=1/(1^2)+1/(2^2)+1/(3^2)……
Private Sub Command1_Click()
Dim i As Long, pi As Double, k As Integer, m As Double
i = 1
k = 1
pi = 0
m = 1
While (m > 0.00001) '设定精度
m = 1 / (2 * i - 1)
pi = pi + k * m
i = i + 1
k = -k
Wend
Print "π/4近似值 "; 4 * pi
End Sub
'采用普遍的傅立叶级数展开方法 pi=2+1/3*(2+2/5*(2+3/7*(2+4/9*(2+5/11 .....))))))
'输入:需计算的圆周率位数,理论精度约30万位
'Add a commandbutton and textbox(multine=true,scrollbars=both) to form1
Option Explicit
Private Sub Command1_Click()
Text1 = getpi(CLng(InputBox("生成多少位数(1-5000)的PI?", "提示", 3000)))
End Sub
Function getpi(Optional ByVal nums As Long = 10000)
nums = nums \ 5
Dim max As Long, result() As String
Dim i As Long, j As Long, t, d As Long, g, k As Long, f()
max = 18 * nums
ReDim f(0 To max)
ReDim result(nums)
Do
f(i) = 20000
i = i + 1
Loop While i <= max
result(0) = "π=" & vbCrLf
g = 20000
j = max
Do
t = 0
i = j
Do
t = t + f(i) * 100000
d = 2 * i + 1
f(i) = t - Int(t / d) * d
t = Int(t / d) * i
i = i - 1
Loop While i >= 1
k = k + 1
result(k) = Format(Int(g + t / 100000) Mod 100000, "00000")
If k Mod 20 = 0 Then result(k) = result(k) & vbCrLf
If k Mod 200 = 0 Then result(k) = result(k) & "---[" & k * 5 & "]---" & vbCrLf
g = t Mod 100000
j = j - 18
Loop While j >= 1
getpi = Join(result, " ")
Mid(getpi, 5, 2) = "3."
End Function