“圆周率(Pi)是圆的周长与直径的比值,一般用希腊字母π表示,是一个在数学及物理学中普遍存在的数学常数。π也等于圆形之面积与半径平方之比。是精确计算圆周长、圆面积、球体积等几何形状的关键值。 在分析学里,π可以严格地定义为满足sin x = 0的最小正实数x。
圆周率用希腊字母 π表示,是一个常数(约等于3.141592654),是代表圆周长和直径的比值。它是一个无理数,即无限不循环小数。在日常生活中,通常都用3.14代表圆周率去进行近似计算。而用十位小数3.141592654便足以应付一般计算。即使是工程师或物理学家要进行较精密的计算,充其量也只需取值至小数点后几百个位。
圆周率用希腊字母 π表示,是一个常数(约等于3.141592654),是代表圆周长和直径的比值。它是一个无理数,即无限不循环小数。在日常生活中,通常都用3.14代表圆周率去进行近似计算。而用十位小数3.141592654便足以应付一般计算。即使是工程师或物理学家要进行较精密的计算,充其量也只需取值至小数点后几百个位。
1965年,英国数学家约翰·沃利斯(John Wallis)出版了一本数学专著,其中他推导出一个公式,发现圆周率等于无穷个分数相乘的积。2015年,罗切斯特大学的科学家们在氢原子能级的量子力学计算中发现了圆周率相同的公式 。”
这个圆周率虽然定义简单,可是其计算并不简单。为了提高其计算精度,自古至今耗费了不知多少人的精力。
今天,我们在Excel中完成。
界面:
VBA源码:(代码基于以下文章略作修改以适用于VBA环境)
参考文章:https://blog.csdn.net/northwolves/article/details/775546, VB计算圆周率
'采用普遍的傅立叶级数展开方法 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()
getpi CLng(InputBox("生成多少位数(1-50000)的PI?", "提示", 30000))
End Sub
Sub getpi(Optional ByVal nums As Long = 10000)
nums = nums / 5
Dim max As Long, laptime As Single, result() As String
Dim i As Long, j As Long, t, d As Long, g, k As Long, f()
laptime = Timer
max = 18 * nums
ReDim f(0 To max)
ReDim result(nums)
For i = 0 To max
f(i) = 20000
Next
result(0) = "π=" & vbCrLf
g = 20000
For j = max To 1 Step -18
t = 0
For i = j To 1 Step -1
t = t + f(i) * 100000
d = 2 * i + 1
f(i) = t - Int(t / d) * d
t = Int(t / d) * i
Next
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
Next
UserForm1.Text1.Text = Join(result, " ")
UserForm1.Caption = UserForm1.Caption & " (计算完毕!总计用时" & Timer - laptime & "秒!)"
End Sub
Sub calculatePI()
UserForm1.Show
End Sub