36 lines
1.4 KiB
Plaintext
36 lines
1.4 KiB
Plaintext
Imports System, System.Numerics, System.Text
|
|
|
|
Module Program
|
|
|
|
Sub RunPiF(ByVal msg As String)
|
|
If msg.Length > 0 Then Console.WriteLine(msg)
|
|
Dim first As Boolean = True, stp As BigInteger = 360,
|
|
lim As BigInteger = stp, res As StringBuilder = New StringBuilder(),
|
|
rc As Integer = -1, u, j, k As BigInteger, q As BigInteger = 1,
|
|
r As BigInteger = 180, t As BigInteger = 60, i As BigInteger = 2,
|
|
y As Byte, et As TimeSpan, st As DateTime = DateTime.Now
|
|
|
|
While True
|
|
While i < lim
|
|
j = i << 1 : k = j + i : u = 3 * (k + 1) * (k + 2)
|
|
y = CByte(((q * (9 * k - 12) + 5 * r) / (5 * t)))
|
|
res.Append(y)
|
|
r = (q * (k + j - 2) + r - y * t) * u * 10
|
|
t *= u : q = 10 * q * (j - 1) * i : i += 1
|
|
End While
|
|
If first Then res.Insert(1, "."c) : first = False
|
|
Console.Write(res.ToString())
|
|
rc += res.Length : res.Clear() : lim += stp
|
|
If Console.KeyAvailable Then Exit While
|
|
End While
|
|
et = DateTime.Now - st : Console.ReadKey()
|
|
Console.Write(res.ToString()) : rc += res.Length
|
|
Console.WriteLine(vbLf & "Produced {0} digits in {1:n4} seconds.", rc, et.TotalSeconds)
|
|
End Sub
|
|
|
|
Sub Main(args As String())
|
|
RunPiF("Press a key to exit...")
|
|
If Diagnostics.Debugger.IsAttached Then Console.ReadKey()
|
|
End Sub
|
|
End Module
|