Average loop length: Difference between revisions

(Added R code)
Line 2,590:
20 5.2893 5.2936 -0.081%</pre>
 
=={{header|VBA}}==
{{trans|Phix}}
<lang vb>Const MAX = 20
Const ITER = 1000000
Function expected(n As Long) As Double
Dim sum As Double
For i = 1 To n
sum = sum + WorksheetFunction.Fact(n) / n ^ i / WorksheetFunction.Fact(n - i)
Next i
expected = sum
End Function
Function test(n As Long) As Double
Dim count As Long
Dim x As Long, bits As Long
For i = 1 To ITER
x = 1
bits = 0
Do While Not bits And x
count = count + 1
bits = bits Or x
x = 2 ^ (Int(n * Rnd()))
Loop
Next i
test = count / ITER
End Function
Public Sub main()
Dim n As Long
Debug.Print " n avg. exp. (error%)"
Debug.Print "== ====== ====== ========"
For n = 1 To MAX
av = test(n)
ex = expected(n)
Debug.Print Format(n, "@@"); " "; Format(av, "0.0000"); " ";
Debug.Print Format(ex, "0.0000"); " ("; Format(Abs(1 - av / ex), "0.000%"); ")"
Next n
End Sub</lang>{{out}}
<pre> n avg. exp. (error%)
== ====== ====== ========
1 1,0000 1,0000 (0,000%)
2 1,4994 1,5000 (0,041%)
3 1,8893 1,8889 (0,023%)
4 2,2187 2,2188 (0,001%)
5 2,5107 2,5104 (0,010%)
6 2,7769 2,7747 (0,080%)
7 3,0162 3,0181 (0,064%)
8 3,2472 3,2450 (0,066%)
9 3,4603 3,4583 (0,056%)
10 3,6577 3,6602 (0,070%)
11 3,8527 3,8524 (0,010%)
12 4,0361 4,0361 (0,001%)
13 4,2121 4,2123 (0,005%)
14 4,3825 4,3820 (0,010%)
15 4,5466 4,5458 (0,016%)
16 4,7023 4,7043 (0,041%)
17 4,8567 4,8579 (0,025%)
18 5,0031 5,0071 (0,079%)
19 5,1530 5,1522 (0,016%)
20 5,2958 5,2936 (0,041%)</pre>
=={{header|zkl}}==
<lang zkl>const N=20;
255

edits