Pchełki SQL, odcinek 14: Wyznaczamy Pi metodą Monte Carlo

Dzisiaj przedstawię bardzo niepraktyczny sposób na wyliczenie przybliżonej wartości liczby Pi.

Metoda jest niepraktyczna z dwóch powodów: po pierwsze, jest mało dokładna (a także, ze względu na swój losowy charakter, słabo powtarzalna), a po drugie, jest wolnozbieżna – uzyskanie sensownego wyniku wymaga mnóstwa iteracji (około miliona, żeby dostać w miarę dokładnie dwa miejsca po przecinku). Jednak z drugiej strony jest ona banalna obliczeniowo, a także pokazuje, że metodami statystycznymi można dostać się przynajmniej w okolice poprawnego wyniku.

Meritum metody zasadza się na tym, że mamy kwadratową „tarczę” o boku długości jeden, z wpisaną w nią ćwiartką okręgu (w taki sposób, że jeden z narożników kwadratu pokrywa się ze środkiem okręgu). Następnie „strzelamy” losowo w tę tarczę, po czym sprawdzamy ile strzałów trafiło w ćwiartkę, a ile spudłowało. Wreszcie dzielimy jedno przez drugie, wynik mnożymy przez 4 (cały okrąg ma pole powierzchni równe Pi, a więc ćwiartka ma powierzchnię Pi/4, stąd mnożenie) i dostajemy, pi razy oko, wartość Pi.

Kod wygląda następująco:

  1. DECLARE @trafione INT = 0
  2.     , @licznik INT = 0
  3.     , @ilosc_probek INT = 1000000
  4. WHILE @licznik < @ilosc_probek
  5. SELECT
  6. @trafione += CASE WHEN (POWER(rand(), 2) + POWER(rand(), 2)) < 1.0 THEN 1 ELSE 0 END
  7. , @licznik += 1
  8.  
  9. SELECT 4.0 * @trafione / @ilosc_probek wynik

Omawiać kodu mi się nie chce, ale jeżeli ktoś czegoś nie zrozumiał, proszę śmiało pytać. Postaram się każde pytanie uważnie zignorować.

Dodaj komentarz

avatar
  Subscribe  
Powiadom o
%d bloggers like this: