Вещественная арифметика (Отчёт по лабораторной работе № 4)

Страницы работы

4 страницы (Word-файл)

Содержание работы

Отчёт

По лабораторной №4

“Вещественная арифметика”

Работу выполнил

Студент гр. 4561                                                                                                       Иванова Н.Д.

1. Постановка задачи

     Написать на языке C++ функции вычисления числа p двумя способами.

     1-ый  способ – статистический (число p вычисляется по формуле: 4Sкр./Sкв., где  Sкв. и Sкр. – площади ¼ квадрата со стороной 1 и ¼ круга вписанного в этот квадрат соответственно. А площади Sкв и Sкр  определяются по количеству точек  с координатами в интервале [0;1] , попадающим в них).

     2-ой способ – геометрический (число p равно половине длины окружности единичного радиуса. Длина этой полуокружности определяется путём определения длины ломаной вписанной в неё).

Сравнить результаты вычислений.

2. Описание входных и выходных параметров. Оператор прототипа

        Для 1 – ой функции:

        Оператор прототипа: double statist(long h)

         Входные данные:

               h – количество проверяемых точек.

         Функция возвращает значение числа    p.  

         Для 2 – ой функции:

        Оператор прототипа: double geom ( double e)

         Входные данные:

               e–погрешность вычислений.

         Функция возвращает значение числа    p.  

3.  Описание алгоритма

       1-ая функция:    

      С помощью функции rand() получаем координаты точек в интервале [0;1]. Очевидно, что все они попадут в четверть квадрата. Подставляя координаты точек в неравенство: x2+y2<=1 выясняем попадают ли точки в четверть круга. Вычисляем число  p.

        2-ая функция:

      Беря начальное значение длины ломаной, вписанной в полуокружность, равным 2 (2 радиуса), вычисляем длины ломанных, полученных при дальнейшем разбиении по формуле:

                           =

     Проделываем это до тех пор пока разность между длинами звеньев ломаной в данном и предыдущем вычислении не станет меньше погрешности. По полученным результатам вычисляем число  p.

4. Текст программы

#include <math.h>

#include <stdlib.h>

#include <time.h.>

double sqr(double a)

{

      a=a*a;

      return a;

}

double statist(long h)

{

    srand(time(NULL));

      int d=0;

      for (int g=1;g<=h;g++)

      {

            int u=rand();

          double i=double(u);

        double x=i/RAND_MAX;

        int v=rand();

          double j=double(v);

          double y=j/RAND_MAX;

            if ((sqr(x)+sqr(y))<=1) d++;

      }

      double d1=double(d);

    double h1=double(h);

      double r=4*d1/h1;

      return r;

}

double geom ( double e)

{

      double x;

      double m;

      int t=1;

      m=e+1;

      double x0=2;

      while (m>e)

      {

            x=sqrt(sqr(x0/2)+sqr(1-sqrt(1-sqr(x0/2))));

            m=t*x0-t*2*x;

            x0=x;

            t*=2;

      }

      x=x*t;

      return x;

}

void main()

{

      double pi1=geom(0.00001);

      double pi2=statist(1000000);

}

5. Анализ результатов и вывод

    Для нахождения числа болееэффективен геометрический способ. При нахождении числа  p этим способом получается наиболее точное значение, чем при вычислении статистическим способом.

         Для функции находящей число p статистическим способом:

Если число проверяемых точек равно n, то программа выполнит :

2n вызовов функции rand();

4n операций преобразования типов.

Похожие материалы

Информация о работе