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
?