PROGRAMA PARA CALCULAR EL NÚMERO PI CON UNA PRECISIÓN
DE 14 DECIMALES
está basado en tres algoritmos para calcular el numero PI:
1- la fórmula de Leibnitz (1674):
π = 4 · ∑i=0∞ (-1)i / (2 · i + 1) Serie extremadamente lenta
la serie entre paréntesis tiene como límite pi / 4, por eso multiplicamos la serie global por 4, ojo que hemos hecho un bucle de 1000000000 ciclos y con un AMD 1900+ ha tardado 579 segundos (casi 10 minutos).
2- la fórmula de Wallis (1665):
π = 2 · Πi=1∞ 4 · i2
/ (4 · i2 - 1)
3- la fórmula de Bailey-Borwein-Plouffe (2002):
π = ∑i=0∞ (1 / 16) i
/ (4 / ( 8 · i + 1) - 2
/ ( 8 · i + 4) - 1 / ( 8 · i + 5) - 1 / ( 8 · i + 6))
El código de este
programa es:
Dim pi As Double
Dim contador As Double
Dim i As Double
Dim TIEMPO1 As Double
Dim TIEMPO2 As Double
Dim maximo As Double
Dim formula As Integer
Private Sub Combo1_Click()
formula = Combo1.ListIndex
End Sub
Private Sub Command1_Click()
pi = 0
TIEMPO1 = Timer
Label1.Caption = ""
Label2.Caption = ""
Label1.Caption = "Calculando..."
Label2.Caption = "Comienza el calculo con precision
de " & Text1.Text & " digitos"
maximo = CStr(Text1.Text)
pi = funcionformula(formula)
TIEMPO2 = Timer
Label1.Caption = Format(pi, "0.00000000000000")
Label2.Caption = "El calculo ha terminado satisfactoriamente
en un tiempo de " & Format(TIEMPO2
- TIEMPO1, "0.####0") & " Seg"
cortar = False
maximo = 1
pi = 0
End Sub
Public Function funcionformula(opcion As Integer) As Double
Select Case opcion
Case 0:
' formula de Leibnitz
pi = 1: For i = 1 To maximo: ProgressBar1.Value = i *
100 / maximo: pi = pi + (-1) ^ i
* (1 / (2 * i + 1)): Next i:
pi = 4 * pi
' formula de Bailey-Borwein-Plouffe
Case 1:
pi = 1: For i = 1 To maximo:
ProgressBar1.Value = i * 100 / maximo:
pi = pi * 4 * i ^ 2 / (4 * i
^ 2 - 1): Next i: pi = pi * 2
' formula de Bailey-Borwein-Plouffe
Case 2:
For i = 0 To maximo: ProgressBar1.Value = i *
100 / maximo: pi = pi + (1 / 16) ^ i * (4 / (8 * i + 1) - 2 / (8 * i + 4) - 1 / (8 * i + 5) - 1 / (8
* i + 6)): Next i:
End Select
funcionformula = pi
End Function
Private Sub Form_Load()
pi = 0
i = 0
TIEMPO1 = 0
TIEMPO2 = 0
cortar = False
maximo = 10
Combo1.AddItem ("Fórmula de Leibnitz")
Combo1.AddItem ("Fórmula
de Wallis")
Combo1.AddItem ("Fórmula
de Bailey-Borwein-Plouffe")
Combo1.ListIndex = 0
formula = Combo1.ListIndex
End Sub