Average loop length: Difference between revisions

no edit summary
No edit summary
Line 508:
39 7.51864 7.50959 ( 0.1204%)
40 7.60255 7.60911 ( 0.0863%)</pre>
=={{header|Delphi}}==
{{libheader| System.SysUtils}}
{{libheader| System.Math}}
{{Trans|C}}
<lang Delphi>
program Average_loop_length;
 
{$APPTYPE CONSOLE}
 
uses
System.SysUtils,
System.Math;
 
const
MAX_N = 20;
TIMES = 1000000;
 
function Factorial(const n: Double): Double;
begin
Result := 1;
if n > 1 then
Result := n * Factorial(n - 1);
end;
 
function Expected(const n: Integer): Double;
var
i: Integer;
begin
Result := 0;
for i := 1 to n do
Result := Result + (factorial(n) / Power(n, i) / factorial(n - i));
end;
 
function Test(const n, times: Integer): integer;
var
i, x, bits: Integer;
begin
Result := 0;
for i := 0 to times - 1 do
begin
x := 1;
bits := 0;
while ((bits and x) = 0) do
begin
inc(Result);
bits := bits or x;
x := 1 shl random(n);
end;
end;
end;
 
var
n, cnt: Integer;
avg, theory, diff: Double;
 
begin
Randomize;
Writeln(#10' tavg'^I'exp.'^I'diff'#10'-------------------------------');
 
for n := 1 to MAX_N do
begin
cnt := test(n, times);
avg := cnt / times;
theory := expected(n);
diff := (avg / theory - 1) * 100;
writeln(format('%2d %8.4f %8.4f %6.3f%%', [n, avg, theory, diff]));
end;
 
readln;
end.
 
</lang>
 
{{out}}
<pre>
 
tavg exp. diff
-------------------------------
1 1,0000 1,0000 0,000%
2 1,4985 1,5000 -0,101%
3 1,8896 1,8889 0,037%
4 2,2195 2,2188 0,035%
5 2,5103 2,5104 -0,003%
6 2,7746 2,7747 -0,005%
7 3,0176 3,0181 -0,017%
8 3,2458 3,2450 0,023%
9 3,4572 3,4583 -0,032%
10 3,6623 3,6602 0,057%
11 3,8494 3,8524 -0,078%
12 4,0373 4,0361 0,029%
13 4,2114 4,2123 -0,023%
14 4,3834 4,3820 0,032%
15 4,5449 4,5458 -0,020%
16 4,7030 4,7043 -0,027%
17 4,8574 4,8579 -0,009%
18 5,0063 5,0071 -0,014%
19 5,1506 5,1522 -0,030%
20 5,2960 5,2936 0,046%
</pre>
=={{header|EchoLisp}}==
<lang scheme>
478

edits