RosettaCodeData/Task/Average-loop-length/Pluto/average-loop-length.pluto
2026-04-30 12:34:36 -04:00

39 lines
817 B
Text

require "table2"
local fmt = require "fmt"
local nmax <const> = 20
local function avg(n)
local tests = 1e4
local sum = 0
for _ = 1, tests do
local v = table.rep(nmax, false)
local x = 1
while !v[x] do
v[x] = true
sum += 1
x = math.random(1, n)
end
end
return sum / tests
end
local function ana(n)
if n < 2 then return 1 end
local term = 1
local sum = 1
for i = n, 2, -1 do
term *= (i - 1) / n
sum += term
end
return sum
end
print(" N average analytical (error)")
print("=== ========= ============ =========")
for n = 1, nmax do
local a = avg(n)
local b = ana(n)
local e = math.abs(a - b) / b * 100
fmt.print("%3d %9.4f %12.4f (%6.2f%%)", n, a, b, e)
end