Const max_N = 20, max_ciclos = 1000000 Function Factorial(Byval N As Integer) As Double Dim As Double d: d = 1 If N = 0 Then Factorial = 1: Exit Function While (N > 1) d *= N N -= 1 Wend Factorial = d End Function Function Analytical(N As Integer) As Double Dim As Double i, sum = 0 For i = 1 To N sum += Factorial(N) / N^i / Factorial(N-i) Next i Return sum End Function Function Average(N As Integer, ciclos As Double) As Double Dim As Integer i, x, bits, sum = 0 For i = 0 To ciclos - 1 x = 1 : bits = 0 While (bits And x) = 0 sum += 1 bits Or= x x = 1 Shl (Rnd * (N - 1)) Wend Next i Return sum / ciclos End Function Randomize Timer Print " N promedio analitico (error)" Print "--- ---------- ----------- ----------" For N As Integer = 1 To max_N Dim As Double avg = Average(N, max_ciclos) Dim As Double ana = Analytical(N) Dim As Double diff = abs(avg-ana) / ana * 100 Print Using " ## #####.###0 #####.###0 ###.#0%"; N; avg; ana; diff Next N Sleep