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); }