#!/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