利用公式编写计算圆周率(π)的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算法,我没学过。
我怀疑你没学过数学,你那俩公式是一回事(无穷级数求和公式就是你开头给出的莱布尼兹公式)
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
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
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
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯