Cálculo de Monte Carlo de Pi em Scala
Suponha que eu gostaria de calcular Pi com a simulação de Monte Carlo como um exercício.
Estou escrevendo uma função, que escolhe um ponto em um quadrado(0, 1), (1, 0)
aleatoriamente e testa se o ponto está dentro do círculo.
import scala.math._
import scala.util.Random
def circleTest() = {
val (x, y) = (Random.nextDouble, Random.nextDouble)
sqrt(x*x + y*y) <= 1
}
Então, estou escrevendo uma função, que usa como argumento a função de teste e o número de tentativas e retorna a fração das tentativas nas quais o teste foi considerado verdadeiro.
def monteCarlo(trials: Int, test: () => Boolean) =
(1 to trials).map(_ => if (test()) 1 else 0).sum * 1.0 / trials
... e eu posso calcular Pi
monteCarlo(100000, circleTest) * 4
Agora eu me pergunto semonteCarlo
função pode ser melhorada. Como você escreveriamonteCarlo
eficiente e legível?
Por exemplo, como o número de tentativas é grande, vale a pena usar umview
ouiterator
ao invés deRange(1, trials)
ereduce
ao invés demap
esum
?