41 lines
832 B
Plaintext
41 lines
832 B
Plaintext
import "random" for Random
|
|
import "./fmt" for Fmt
|
|
|
|
var nmax = 20
|
|
var rand = Random.new()
|
|
|
|
var avg = Fn.new { |n|
|
|
var tests = 1e4
|
|
var sum = 0
|
|
for (t in 0...tests) {
|
|
var v = List.filled(nmax, false)
|
|
var x = 0
|
|
while (!v[x]) {
|
|
v[x] = true
|
|
sum = sum + 1
|
|
x = rand.int(n)
|
|
}
|
|
}
|
|
return sum/tests
|
|
}
|
|
|
|
var ana = Fn.new { |n|
|
|
if (n < 2) return 1
|
|
var term = 1
|
|
var sum = 1
|
|
for (i in n-1..1) {
|
|
term = term * i / n
|
|
sum = sum + term
|
|
}
|
|
return sum
|
|
}
|
|
|
|
System.print(" N average analytical (error)")
|
|
System.print("=== ========= ============ =========")
|
|
for (n in 1..nmax) {
|
|
var a = avg.call(n)
|
|
var b = ana.call(n)
|
|
var e = (a - b).abs/ b * 100
|
|
Fmt.print("$3d $9.4f $12.4f ($6.2f\%)", n, a, b, e)
|
|
}
|