25 lines
640 B
Text
25 lines
640 B
Text
require "bignum"
|
|
local fmt = require "fmt"
|
|
|
|
mpfr.init()
|
|
mpfr.setBits(200)
|
|
|
|
local function ramanujan(n, dp)
|
|
local bd = new bigdec(n, dp)
|
|
local pi = mpfr.pi(dp)
|
|
local sr = mpfr.sqrt(bd)
|
|
return mpfr.exp(pi * sr)
|
|
end
|
|
|
|
print("Ramanujan's constant to 32 decimal places is:")
|
|
print(ramanujan(163, 32):tostring(32))
|
|
local heegner = {19, 43, 67, 163}
|
|
print("\nHeegner numbers yielding almost integers:")
|
|
for heegner as h do
|
|
local r = ramanujan(h, 32)
|
|
local rc = r:ceil()
|
|
local diff = (rc - r):tostring(32)
|
|
r = r:tostring(32)
|
|
rc = rc:tostring(32)
|
|
fmt.print("%3d: %51s ≈ %18s (diff: %s)", h, r, rc, diff)
|
|
end
|