Введение в практику разработки параллельных программ в стандарте MPI. Баканов В.М - 43 стр.

UptoLike

Составители: 

- 43 -
Часть 2 работы. Для вычисления значения
π
можно использовать метод
стрельбы’ (рис.5) - вариант метод Монте-Карло. В применении к данному
случаю метод заключается в генерации равномерно распределенных на дву-
мерной области [0
x 1, 0 y
1] точек и определении
darts
score
44
S
S
ABC0
AC0
×× =
π
,
где S – площади фигур на рис.3, scoreчис-
ло попавших внутрь четверти окружности
(фигура 0AC) точек (условие x
2
+y
2
1.0, на
рис.5 удовлетворяющие этому условию точ-
ки обозначены квадратами), dartsобщее
число точек (‘выстрелов’, throws). Вычис-
ленное таким образом значение
π
является
приближенным, в общем случае точность
вычисления искомого значения повышается
с увеличением числавыстрелови качества
датчика случайных чисел; подобные мето-
ды используются в случае трудностей точ-
ной числовой оценки (например, для вы-
числения определенных интегралов боль-
шой кратности).
Именно функция dboard (‘мишень’) генерирует DARTS пар равномерно
распределенных на отрезке [0
÷
1] случайных чисел, проверяет принадлеж-
ность нахождения точки (определяемой координатами последней двойки
случайных чисел) внутренней области четверти окружности и вычисляет те-
кущее значение
π
; расчеты проводятся при начальном значении DARTS c
последующим увеличением ROUNDS раз (заданы посредством #define).
Последовательный вариант программ вычисления
π
методомстрельбы
приведен ниже (файл PI_SER.C, функция DBOARD расположена в файле
dboard.c и подключается посредством #include ‘dboard.c’):
// source code PI_SER.C program
#include <stdio.h>
#include <math.h>
#include <sys/timeb.h> // for ftime
double f_time(void); /* define real time by ftime function */
void srandom (unsigned seed);
long random(void);
double dboard (int darts);
#include “dboard.c” // including dboard.c file
#include “f_time.c” // including f_time.c file
#define DARTS 10000 /* number of throws at dartboard */
#define ROUNDS 100 /* number of times "darts" is iterated */
Рисунок 5.— Определение зна-
чения
π
методомстрельбы
   Часть 2 работы. Для вычисления значения π можно использовать метод
‘стрельбы’ (рис.5) - вариант метод Монте-Карло. В применении к данному
случаю метод заключается в генерации равномерно распределенных на дву-
мерной области [0 ≤ x ≤ 1, 0 ≤ y ≤ 1] точек и определении π = 4 × S0AC ≈ 4 ×
                                                                             score
                                                                                   ,
                                                                 S0ABC       darts
где S – площади фигур на рис.3, score – чис-
ло попавших внутрь четверти окружности
                                    2 2
(фигура 0AC) точек (условие x +y ≤ 1.0, на
рис.5 удовлетворяющие этому условию точ-
ки обозначены квадратами), darts – общее
число точек (‘выстрелов’, throws). Вычис-
ленное таким образом значение π является
приближенным, в общем случае точность
вычисления искомого значения повышается
с увеличением числа ‘выстрелов’ и качества
датчика случайных чисел; подобные мето-
ды используются в случае трудностей точ-
ной числовой оценки (например, для вы- Рисунок 5.— Определение зна-
числения определенных интегралов боль-              чения π методом ‘стрельбы’
шой кратности).
   Именно функция dboard (‘мишень’) генерирует DARTS пар равномерно
распределенных на отрезке [0 ÷ 1] случайных чисел, проверяет принадлеж-
ность нахождения точки (определяемой координатами последней двойки
случайных чисел) внутренней области четверти окружности и вычисляет те-
кущее значение π ; расчеты проводятся при начальном значении DARTS c
последующим увеличением ROUNDS раз (заданы посредством #define).
   Последовательный вариант программ вычисления π методом ‘стрельбы’
приведен ниже (файл PI_SER.C, функция DBOARD расположена в файле
dboard.c и подключается посредством #include ‘dboard.c’):

// source code PI_SER.C program
#include 
#include 

#include  // for ftime
double f_time(void); /* define real time by ftime function */

void srandom (unsigned seed);
long random(void);
double dboard (int darts);
#include “dboard.c” // including dboard.c file
#include “f_time.c” // including f_time.c file

#define DARTS 10000 /* number of throws at dartboard */
#define ROUNDS 100 /* number of times "darts" is iterated */


                                                 - 43 -