永发信息网

利用公式编写计算圆周率(π)的VB程序

答案:3  悬赏:30  手机版
解决时间 2021-04-01 20:59
  • 提问者网友:遮云壑
  • 2021-04-01 04:58
利用公式编写计算圆周率(π)的VB程序
最佳答案
  • 五星知识达人网友:山有枢
  • 2021-04-01 05:38
sub form_load()
dim a,x as integer
dim pi as single
pi=0
for i=1 to 30000
x=((-1)^(i+1))*(2*i-1)
pi=1/x+pi
next i
print 4*pi
end sub
“一定要能算到上千万位!”
你疯了吗?你学过计算机吗?怎么也不可能吧,一个32位pc机,用vb算? 用这个公式?
用牛顿迭代,vb仅能算到精确14位,速度还行,你这算法算6位电脑就卡爆了。c语言能好些,但也好不到哪去。追问谁说不能算到上千万位?你去下载Super Pi这款软件,这个软件能算3500万位呢!
还有,我要把算好的圆周率导入C:\PI.txt。追答你另找高人吧,你这公式对电脑来说是运行速度最慢的公式,你先把高等数学、计算机硬件学、vb都好好学一遍。VB的single占4个字节,取值范围10-45~10+38,有7位有效数字;double有14位有效数字。vb还有个缺点,运算速度奇慢。super pi的程序是用汇编做的,算法也是其他算法,不会是这个天杀的莱布尼兹公式,冗长又慢。追问那我还有个公式。
或者马青公式:
π=16arctan1/5-4arctan1/239追答我给你讲吧,最好的公式,牛顿迭代法,不知你学没学过微积分
解方程sin(x)=0.5^0.5
sub form_load()
dim x as double
dim i as integer
x=0.7
for i=1 to 4
x=x-(sin(x)-0.5^0.5)/cos(x)
next i
print 4*x
end sub
15位翻天了,要算更精确,vb是不可能的了。
马青公式也可以。
要算数学,用matlab、mathmatica、maple这些数学专用程序才行。
用一般程序语言,要算到浮点以后的数位,就要用bailey-borwein-plouffe算法,我没学过。
我怀疑你没学过数学,你那俩公式是一回事(无穷级数求和公式就是你开头给出的莱布尼兹公式)
全部回答
  • 1楼网友:山君与见山
  • 2021-04-01 07:15
π的精确值如下(前1000位):
3.
1415926535 8979323846 2643383279 5028841971 6939937510
5820974944 5923078164 0628620899 8628034825 3421170679
8214808651 3282306647 0938446095 5058223172 5359408128
48
  • 2楼网友:封刀令
  • 2021-04-01 06:06
Sub GetPI(Optional ByVal Nums As Long = 10000)
Nums = Nums  5
Dim Max As Long, LapTime As Single, Result() As StringDim I, J, K As Long, T, G As Long, F()
LapTime = Timer
Max = 10 * Nums
ReDim F(1 To Max)
ReDim Result(Nums)
For I = 1 To Max
    DoEvents
    F(I) = 30000
Next IFor J = Max To 1 Step -10
    T = 0
    
    For I = J To 1 Step -1
        DoEvents
        If J = Max Then
            T = T + F(I) * 1000000
        Else
            T = T + F(I) * 100000
        End If
        
        F(I) = T - Int(T / (8 * I * (2 * I + 1))) * (8 * I * (2 * I + 1))
        T = Int(T / (8 * I * (2 * I + 1))) * (2 * I - 1) ^ 2
    Next I
    
    Result(K) = Format(Int(G + T / 100000) Mod 100000, "00000")
    G = T Mod 100000
    K = K + 1
Next J
txtPI = Join(Result, " ")
txtPI = txtPI & vbCrLf & "用时" & Format(Timer - LapTime, "0.000") & "秒!"
End Sub
Private Sub txtPI_DblClick()
On Error Resume Next
GetPI CLng(InputBox("圆周率小数部分长度?(5-50000)", App.Title, 500))
End Sub 
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯