Average loop length: Difference between revisions
Content added Content deleted
(Average loop length en FreeBasic) |
(→{{header|Lua}}: added Lua solution) |
||
Line 1,368: | Line 1,368: | ||
20 5.2792 5.29358459 -0.2717% |
20 5.2792 5.29358459 -0.2717% |
||
</pre> |
</pre> |
||
=={{header|Lua}}== |
|||
<lang lua>function average(n, reps) |
|||
local count = 0 |
|||
for r = 1, reps do |
|||
local f = {} |
|||
for i = 1, n do f[i] = math.random(n) end |
|||
local seen, x = {}, 1 |
|||
while not seen[x] do |
|||
seen[x], x, count = true, f[x], count+1 |
|||
end |
|||
end |
|||
return count / reps |
|||
end |
|||
function analytical(n) |
|||
local s, t = 1, 1 |
|||
for i = n-1, 1, -1 do t=t*i/n s=s+t end |
|||
return s |
|||
end |
|||
print(" N average analytical (error)") |
|||
print("=== ========= ============ =========") |
|||
for n = 1, 20 do |
|||
local avg, ana = average(n, 1e6), analytical(n) |
|||
local err = (avg-ana) / ana * 100 |
|||
print(string.format("%3d %9.4f %12.4f (%6.3f%%)", n, avg, ana, err)) |
|||
end</lang> |
|||
{{out}} |
|||
<pre> N average analytical (error) |
|||
=== ========= ============ ========= |
|||
1 1.0000 1.0000 ( 0.000%) |
|||
2 1.5002 1.5000 ( 0.014%) |
|||
3 1.8896 1.8889 ( 0.037%) |
|||
4 2.2176 2.2188 (-0.054%) |
|||
5 2.5094 2.5104 (-0.038%) |
|||
6 2.7732 2.7747 (-0.054%) |
|||
7 3.0186 3.0181 ( 0.016%) |
|||
8 3.2440 3.2450 (-0.031%) |
|||
9 3.4554 3.4583 (-0.085%) |
|||
10 3.6625 3.6602 ( 0.063%) |
|||
11 3.8534 3.8524 ( 0.026%) |
|||
12 4.0354 4.0361 (-0.016%) |
|||
13 4.2111 4.2123 (-0.031%) |
|||
14 4.3839 4.3820 ( 0.043%) |
|||
15 4.5453 4.5458 (-0.012%) |
|||
16 4.7054 4.7043 ( 0.024%) |
|||
17 4.8596 4.8579 ( 0.035%) |
|||
18 5.0099 5.0071 ( 0.056%) |
|||
19 5.1553 5.1522 ( 0.060%) |
|||
20 5.2901 5.2936 (-0.066%)</pre> |
|||
=={{header|Mathematica}} / {{header|Wolfram Language}}== |
=={{header|Mathematica}} / {{header|Wolfram Language}}== |