Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
|
|
@ -0,0 +1,54 @@
|
|||
Imports System, System.Numerics
|
||||
|
||||
Module Program
|
||||
Function IntSqRoot(ByVal valu As BigInteger, ByVal guess As BigInteger) As BigInteger
|
||||
Dim term As BigInteger : Do
|
||||
term = valu / guess
|
||||
If BigInteger.Abs(term - guess) <= 1 Then Exit Do
|
||||
guess += term : guess >>= 1
|
||||
Loop While True : Return guess
|
||||
End Function
|
||||
|
||||
Function ISR(ByVal term As BigInteger, ByVal guess As BigInteger) As BigInteger
|
||||
Dim valu As BigInteger = term * guess : Do
|
||||
If BigInteger.Abs(term - guess) <= 1 Then Exit Do
|
||||
guess += term : guess >>= 1 : term = valu / guess
|
||||
Loop While True : Return guess
|
||||
End Function
|
||||
|
||||
Function CalcAGM(ByVal lam As BigInteger, ByVal gm As BigInteger, ByRef z As BigInteger,
|
||||
ByVal ep As BigInteger) As BigInteger
|
||||
Dim am, zi As BigInteger : Dim n As ULong = 1 : Do
|
||||
am = (lam + gm) >> 1 : gm = ISR(lam, gm)
|
||||
Dim v As BigInteger = am - lam
|
||||
zi = v * v * n : If zi < ep Then Exit Do
|
||||
z -= zi : n <<= 1 : lam = am
|
||||
Loop While True : Return am
|
||||
End Function
|
||||
|
||||
Function BIP(ByVal exp As Integer, ByVal Optional man As ULong = 1) As BigInteger
|
||||
Dim rv As BigInteger = BigInteger.Pow(10, exp) : Return If(man = 1, rv, man * rv)
|
||||
End Function
|
||||
|
||||
Sub Main(args As String())
|
||||
Dim d As Integer = 25000
|
||||
If args.Length > 0 Then
|
||||
Integer.TryParse(args(0), d)
|
||||
If d < 1 OrElse d > 999999 Then d = 25000
|
||||
End If
|
||||
Dim st As DateTime = DateTime.Now
|
||||
Dim am As BigInteger = BIP(d),
|
||||
gm As BigInteger = IntSqRoot(BIP(d + d - 1, 5),
|
||||
BIP(d - 15, Math.Sqrt(0.5) * 1.0E+15)),
|
||||
z As BigInteger = BIP(d + d - 2, 25),
|
||||
agm As BigInteger = CalcAGM(am, gm, z, BIP(d + 1)),
|
||||
pi As BigInteger = agm * agm * BIP(d - 2) / z
|
||||
Console.WriteLine("Computation time: {0:0.0000} seconds ",
|
||||
(DateTime.Now - st).TotalMilliseconds / 1000)
|
||||
If args.Length > 1 OrElse d <= 1000 Then
|
||||
Dim s As String = pi.ToString()
|
||||
Console.WriteLine("{0}.{1}", s(0), s.Substring(1))
|
||||
End If
|
||||
If Diagnostics.Debugger.IsAttached Then Console.ReadKey()
|
||||
End Sub
|
||||
End Module
|
||||
Loading…
Add table
Add a link
Reference in a new issue