34 lines
701 B
Plaintext
34 lines
701 B
Plaintext
const N=20;
|
|
|
|
(" N average analytical (error)").println();
|
|
("=== ========= ============ =========").println();
|
|
foreach n in ([1..N]){
|
|
a := avg(n);
|
|
b := ana(n);
|
|
"%3d %9.4f %12.4f (%6.2f%%)".fmt(
|
|
n, a, b, ((a-b)/b*100)).println();
|
|
}
|
|
|
|
fcn f(n){ (0).random(n) }
|
|
|
|
fcn avg(n){
|
|
tests := 0d10_000;
|
|
sum := 0;
|
|
do(tests){
|
|
v:=(0).pump(n,List,T(Void,False)).copy();
|
|
while(1){
|
|
z := f(n);
|
|
if(v[z]) break;
|
|
v[z] = True;
|
|
sum += 1;
|
|
}
|
|
}
|
|
return(sum.toFloat() / tests);
|
|
}
|
|
|
|
fcn fact(n) { (1).reduce(n,fcn(N,n){N*n},1.0) } //-->Float
|
|
fcn ana(n){
|
|
n=n.toFloat();
|
|
(1).reduce(n,'wrap(sum,i){ sum+fact(n)/n.pow(i)/fact(n-i) },0.0);
|
|
}
|