![]() |
PCDVD數位科技討論區
(https://www.pcdvd.com.tw/index.php)
- 七嘴八舌異言堂
(https://www.pcdvd.com.tw/forumdisplay.php?f=12)
- - vb6高手求教?圓周率的程式如何寫呢?
(https://www.pcdvd.com.tw/showthread.php?t=730530)
|
|---|
幾千位的確可以很快就算完了
不過精確度可能很差 只能說是近似值而已吧 |
可以節省42%的時間,參考看看... :ase
程式內容: method1是分開算的,加法和減法分開,最後加在一起, method2是原本的 最後有列印出,計數method1和method2的計算時間... 代碼:
Private Sub Form_Load()
Dim pi As Variant
Dim i As Long 'Single
Dim j As Variant
Dim k As Variant
Dim Start, Finish, TotalTime
pi = 0
j = 0
k = 0
If (MsgBox("Press Yes to start for pi calculation", 4)) = vbYes Then
'=============method1(divide calculate)====================
Start = Timer
For i = 0 To 10000000 '2147483646
j = j + CDec(1 / (4 * i + 1))
Next i
For i = 1 To 10000000
k = k - CDec(1 / (4 * i - 1))
Next i
pi = j + k
pi = 4 * CDec(pi)
Finish = Timer
TotalTime = Finish - Start
Debug.Print "method1:" & pi
Debug.Print "method1 time:" & TotalTime
'=============method2(original)====================
pi = 0
Start = Timer
For i = 0 To 20000000 '2147483646
pi = pi + CDec(1 / (2 * i + 1) * (-1) ^ i)
Next i
pi = 4 * CDec(pi)
Finish = Timer
TotalTime = Finish - Start
Debug.Print "method2:" & pi
Debug.Print "method2 time:" & TotalTime
Else
End
End If
End Sub
|
引用:
嗯!不錯。 稍微改變一下方式 節省不少的時間 :) |
改良一下下
pi=0 pi=cdec(pi) 這樣pi就轉型成功了 然後 在迴圈這部分 pi = pi + CDec(1 / (2 * i + 1) * (-1) ^ i) 拿掉cdec() 變成 pi = pi + 1 / (2 * i + 1) * (-1) ^ i 這樣執行出來結果不變,而且速度會再加快10%左右 因為cdec()會拖累速度,每次迴圈都用到,會變慢... 就先給它轉型了... --- |
引用:
這麼有興趣還在研究嗎? CDec的用意是在更精確至小數28位數 只是以目前這個程式 執行效率這麼差 跑至正確的小數位十位的話 可能要一天了 所以CDec不用也沒關係 :) |
| 所有的時間均為GMT +8。 現在的時間是11:42 AM. |
vBulletin Version 3.0.1
powered_by_vbulletin 2026。