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 ?

questionAnswers(6)

yourAnswerToTheQuestion