Cálculo de Monte Carlo de Pi en Scala
Supongamos que me gustaría calcular Pi con la simulación de Monte Carlo como ejercicio.
Estoy escribiendo una función, que selecciona un punto en un cuadrado(0, 1), (1, 0)
al azar y prueba si el punto está dentro del círculo.
import scala.math._
import scala.util.Random
def circleTest() = {
val (x, y) = (Random.nextDouble, Random.nextDouble)
sqrt(x*x + y*y) <= 1
}
Luego estoy escribiendo una función, que toma como argumentos la función de prueba y el número de pruebas y devuelve la fracción de las pruebas en las que se encontró que la prueba era verdadera.
def monteCarlo(trials: Int, test: () => Boolean) =
(1 to trials).map(_ => if (test()) 1 else 0).sum * 1.0 / trials
... y puedo calcular Pi
monteCarlo(100000, circleTest) * 4
Ahora me pregunto simonteCarlo
La función se puede mejorar. Como escribiriasmonteCarlo
eficiente y legible?
Por ejemplo, dado que el número de ensayos es grande, vale la pena usar unview
oiterator
en lugar deRange(1, trials)
yreduce
en lugar demap
ysum
?