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