Определение площади окружности в центре координат методом Монте-Карло

Ангелинкаа

PascalABC Метод Монте-Карло. Написать прогорамму для определения площади окружности в центре координат произвольным радиусом
1 ответ

Ангелинкаа

площади окружности
Любая окружность не имеет площади по определению. Полагаю, опечатка. Вероятно, Вы хотели напечатать "площадь круга".
var x, y, r, s: real;
    n, k: longint;
begin
  randomize;
  write('R = ');
  readln(r);
  k := 0;
  for n := 1 to 1000000 do
    begin
      x := (random * 2 - 1) * r;
      y := (random * 2 - 1) * r;
      if x * x + y * y <= r * r then inc(k)
    end;
    s := 4 * r * r / 1000000 * k;
  writeln('Площадь круга.');
  writeln('Метод  Монте-Карло: ', s:0:10);
  writeln('Встроенные функции: ', pi * r * r:0:10);
  readln
end.
Из-за несовершенства встроенного в паскаль генератора псевдослучайных чисел оказалось невозможным применить правильный критерий оценки погрешности вычисления площади методом Монте-Карло. В программе реализован подсчёт площади с помощью миллиона псевдослучайных точек для круга с радиусом 1 с последующим вычислением площади круга радиусом R. Сделано это для уменьшения ошибок усечения чисел с плавающей точкой. Фактически, я вынес умножение на радиус из цикла. Но, все мои ухищрения не могут усовершенствовать генератор псевдослучайных чисел. Программа выдаёт не менее 3 верных разрядов результата. При увеличении количества точек до миллиарда количество верных разрядов не повышается, а ждать результата приходится долго (тем более, в Pascal ABC это будет вообще чистый ужас, потому что он интерпретатор, а не компилятор). Работа программы проверена в FPC. Если результата в Pascal ABC придётся ждать слишком долго, уменьшите количество точек раз в 100, правда, точность упадёт...