#!/usr/bin/env ruby
[ 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000 ].each do |iter|
count = 0
iter.times do |i|
x = rand
t = rand * Math::PI / 2.0
count += 1 if Math.sin(t) > 2*x
end
print iter
print " --> "
puts iter * 1.0 / count
end
Risultato: il valore "oscilla", ma più si aumentano le iterazioni e più si approssima a pi greco (i numeri pseudocasuali di Ruby sono "abbastanza" casuali: il generatore ha un periodo di 2 alla 19937 meno 1):
1 --> 1.0 10 --> 2.0 100 --> 2.85714285714286 1000 --> 3.15457413249211 10000 --> 3.11526479750779 100000 --> 3.14060488049998 1000000 --> 3.14240104579107 10000000 --> 3.14235759778074
Eh, sì, si approssima a pi greco anche se avrei dovuto usare un rapporto L/a minore di uno anziché esattamente uguale a uno... Ma data l'ora tarda, mi è sfuggito!
RispondiElimina