Monte Carlo Berechnung von Pi in Scala

Angenommen, ich möchte Pi mit Monte-Carlo-Simulation als Übung berechnen.

Ich schreibe eine Funktion, die einen Punkt in einem Quadrat auswählt(0, 1), (1, 0) zufällig und prüft, ob der Punkt innerhalb des Kreises liegt.

import scala.math._
import scala.util.Random

def circleTest() = {
  val (x, y) = (Random.nextDouble, Random.nextDouble)
  sqrt(x*x + y*y) <= 1
}

Dann schreibe ich eine Funktion, die die Testfunktion und die Anzahl der Versuche als Argumente verwendet und den Bruchteil der Versuche zurückgibt, bei denen der Test als wahr befunden wurde.

def monteCarlo(trials: Int, test: () => Boolean) =
  (1 to trials).map(_ => if (test()) 1 else 0).sum * 1.0 / trials

... und ich kann Pi @ berechn

monteCarlo(100000, circleTest) * 4

Jetzt frage ich mich, obmonteCarlo -Funktion kann verbessert werden. Wie würdest du @ schreibmonteCarlo effizient und lesbar?

Zum Beispiel lohnt es sich, ein @ zu verwenden, da die Anzahl der Versuche groß isview oderiterator anstattRange(1, trials) undreduce anstattmap undsum ?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage