Монте-Карло расчет Пи в Скала
Предположим, я хотел бы рассчитать Пи с помощью симуляции Монте-Карло в качестве упражнения.
Я пишу функцию, которая выбирает точку в квадрате(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
?