Параллельное программирование в стандарте MPI. Баканов В.М - 49 стр.

UptoLike

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

- 49 -
Часть 2 работы. Для вычисления значения
π
можно использовать метод
стрельбы’ (рис.4.1) – вариант метод Монте-Карло. В применении к данному
случаю метод заключается в генерации равномерно распределенных на дву-
мерной области [0
x
1, 0
y
1] точек и определении
darts
score
44
S
S
OAB
C
OAC
××
=π
,
где Sплощади фигур на рис.4.1,
score
число попавших внутрь четверти окружно-
сти (фигура
0AC
) точек (условие x
2
+y
2
1.0,
на рис.4.1 удовлетворяющие этому условию
точки обозначены квадратами),
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 */
int main(int argc, char *argv[])
Рисунок 4.1 Определение вели-
чины
π
методомстрельбы
                                            - 49 -

   Часть 2 работы. Для вычисления значения π можно использовать метод
‘стрельбы’ (рис.4.1) – вариант метод Монте-Карло. В применении к данному
случаю метод заключается в генерации равномерно распределенных на дву-
мерной области [0 ≤ x ≤ 1, 0 ≤ y ≤ 1] точек и определении π = 4 × S OAC ≈ 4 ×
                                                                              score
                                                                                    ,
                                                                  S OABC      darts
где S – площади фигур на рис.4.1, score –
число попавших внутрь четверти окружно-
                                        2 2
сти (фигура 0AC) точек (условие x +y ≤ 1.0,
на рис.4.1 удовлетворяющие этому условию
точки обозначены квадратами), darts – об-
щее число точек (‘выстрелов’, throws). Вы-
численное таким образом значение π явля-
ется приближенным, в общем случае точ-
ность вычисления искомого значения по-
вышается с увеличением числа ‘выстрелов’
и качества датчика случайных чисел; по-
добные методы используются в случае
трудностей точной числовой оценки (на- Рисунок 4.1 — Определение вели-
                                                     чины π методом ‘стрельбы’
пример, для вычисления определенных ин-
тегралов большой кратности).
   Именно функция 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 */

int main(int argc, char *argv[])