Монте-Карло расчет Пи в Скала

Предположим, я хотел бы рассчитать Пи с помощью симуляции Монте-Карло в качестве упражнения.

Я пишу функцию, которая выбирает точку в квадрате(0, 1), (1, 0) наугад и проверяет, находится ли точка внутри круга.

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

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

Затем я пишу функцию, которая принимает в качестве аргументов тестовую функцию и количество испытаний и возвращает долю испытаний, в которых тест был признан истинным.

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

... и я могу рассчитать Пи

monteCarlo(100000, circleTest) * 4

Теперь мне интересно, еслиmonteCarlo функция может быть улучшена. Как бы вы написалиmonteCarlo эффективный и читаемый?

Например, поскольку количество испытаний велико, стоит лиview или жеiterator вместоRange(1, trials) а такжеreduce вместоmap а такжеsum ?

Ответы на вопрос(6)

Ваш ответ на вопрос