Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
|
|
@ -0,0 +1,87 @@
|
|||
import "./fmt" for Fmt
|
||||
|
||||
var eps = 1e-6
|
||||
|
||||
System.print("From the definition, err. 3e-10")
|
||||
var n = 400
|
||||
var h = 1
|
||||
for (k in 2..n) h = h + 1/k
|
||||
//faster convergence: Negoi, 1997
|
||||
var a = (n + 0.5 + 1/(24*n)).log
|
||||
|
||||
Fmt.print("Hn $0.14f", h)
|
||||
Fmt.print("gamma $0.14f\nk = $d\n", h - a, n)
|
||||
|
||||
System.print("Sweeney, 1963, err. idem")
|
||||
n = 21
|
||||
var s = [0, n]
|
||||
var r = n
|
||||
var k = 1
|
||||
while (true) {
|
||||
k = k + 1
|
||||
r = r * n / k
|
||||
s[k & 1] = s[k & 1] + r/k
|
||||
if (r <= eps) break
|
||||
}
|
||||
Fmt.print("gamma $0.14f\nk = $d\n", s[1] - s[0] - n.log, k)
|
||||
|
||||
System.print("Bailey, 1988")
|
||||
n = 5
|
||||
a = 1
|
||||
h = 1
|
||||
var n2 = 2.pow(n)
|
||||
r = 1
|
||||
k = 1
|
||||
while (true) {
|
||||
k = k + 1
|
||||
r = r * n2 / k
|
||||
h = h + 1/k
|
||||
var b = a
|
||||
a = a + r * h
|
||||
if ((b-a).abs <= eps) break
|
||||
}
|
||||
a = a * n2 / n2.exp
|
||||
Fmt.print("gamma $0.14f\nk = $d\n", a - n * 2.log, k)
|
||||
|
||||
System.print("Brent-McMillan, 1980")
|
||||
n = 13
|
||||
a = -n.log
|
||||
var b = 1
|
||||
var u = a
|
||||
var v = b
|
||||
n2 = n * n
|
||||
var k2 = 0
|
||||
k = 0
|
||||
while (true) {
|
||||
k2 = k2 + 2*k + 1
|
||||
k = k + 1
|
||||
a = a * n2 / k
|
||||
b = b * n2 / k2
|
||||
a = (a + b)/k
|
||||
u = u + a
|
||||
v = v + b
|
||||
if (a.abs <= eps) break
|
||||
}
|
||||
Fmt.print("gamma $0.14f\nk = $d\n", u / v, k)
|
||||
|
||||
System.print("How Euler did it in 1735")
|
||||
// Bernoulli numbers with even indices
|
||||
var b2 = [1, 1/6, -1/30, 1/42, -1/30, 5/66, -691/2730, 7/6, -3617/510, 43867/798]
|
||||
var m = 7
|
||||
n = 10
|
||||
// n'th harmonic number
|
||||
h = 1
|
||||
for (k in 2..n) h = h + 1/k
|
||||
Fmt.print("Hn $0.14f", h)
|
||||
h = h - n.log
|
||||
Fmt.print(" -ln $0.14f", h)
|
||||
// expansion C = -digamma(1)
|
||||
a = -1 / (2*n)
|
||||
n2 = n * n
|
||||
r = 1
|
||||
for (k in 1..m) {
|
||||
r = r * n2
|
||||
a = a + b2[k] / (2*k*r)
|
||||
}
|
||||
Fmt.print("err $0.14f\ngamma $0.14f\nk = $d", a, h + a, n + m)
|
||||
System.print("\nC = 0.57721566490153286...")
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
import "./gmp" for Mpf
|
||||
|
||||
var euler = Fn.new { |n, r, s, t|
|
||||
// decimal precision
|
||||
var e10 = (n/0.6).floor
|
||||
|
||||
// binary precision
|
||||
var e2 = ((1 + n/0.6)/0.30103).round
|
||||
Mpf.defaultPrec = e2
|
||||
|
||||
var b = Mpf.new().log(Mpf.from(16).div(15))
|
||||
var a = b.mul(r)
|
||||
b = Mpf.new().log(Mpf.from(25).div(24))
|
||||
a.add(b.mul(s))
|
||||
b = Mpf.new().log(Mpf.from(81).div(80))
|
||||
var u = b * t
|
||||
a.add(u).neg
|
||||
b.set(1)
|
||||
u.set(a)
|
||||
var v = Mpf.from(b)
|
||||
var k = 0
|
||||
var n2 = n * n
|
||||
var k2 = Mpf.zero
|
||||
while (true) {
|
||||
k2.add((k << 1) + 1)
|
||||
k = k + 1
|
||||
b.mul(n2).div(k2)
|
||||
a.mul(n2).div(k).add(b).div(k)
|
||||
u.add(a)
|
||||
v.add(b)
|
||||
var e = Mpf.frexp(a)[1]
|
||||
if (e.abs >= e2) break
|
||||
}
|
||||
u.div(v)
|
||||
System.print("gamma %(u.toString(10, 100)) (maxerr. 1e-%(e10))")
|
||||
System.print("k = %(k)")
|
||||
}
|
||||
|
||||
var start = System.clock
|
||||
euler.call(60, 41, 30, 18)
|
||||
euler.call(4800, 85, 62, 37)
|
||||
euler.call(9375, 91, 68, 40)
|
||||
euler.call(18750, 98, 73, 43)
|
||||
System.print("\nTook %(System.clock - start) seconds.")
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
import "./gmp" for Mpf
|
||||
|
||||
var prec = (101/0.30103).round
|
||||
var gamma = Mpf.euler(prec)
|
||||
System.print(gamma.toString(10, 100))
|
||||
Loading…
Add table
Add a link
Reference in a new issue