Форум программистов, компьютерный форум CyberForum.ru

Нахождение числа Пи с заданной точностью - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Как подсчитать число вершин бинарного дерева? http://www.cyberforum.ru/cpp-beginners/thread33895.html
Очень надо программу для подсчета числа вершин в бинарном дереве! Программа должна быть на решена с помощью рекурсии !
C++ Работа с указателем на void * Добрый всем день. Помогите пожалуйста вот по какому вопросу. Имеется некая функция: void* str_replace( const char str ) { /*Тут бла-бла-бла*/ не буду описывать... . char string; /*Тут заполняется значениями*/ http://www.cyberforum.ru/cpp-beginners/thread33890.html
с++ задачи на массивы и матрицы C++
Люди помогите плиззззз:'( завтра уже сдавать надо)):'( последняя надежда на вас:sorry: 1. В одномерном массиве состоящем из n вещественных элементов (размерность задается именованной константой), вычислить: - максимальный элемент массива - сумма элементов массива, расположенных до последнего положительного элемента Сжать массив, удалив из него все элементы, модуль которых находится в...
Удалить столбец матрицы, в котором находится первый четный отрицательный элемент C++
1. Дан двумерный массив размером 5*8, заполненный случайным образом. Удалить столбец, в котором находится первый четный отрицательный элемент. 2. Дан массив(х20). Требуется заменить четные элементы на числа с противоположным знаком и упорядочить получившийся массив по убыванию. Использовать функцию сортировки обменом. 3. Дан массив х. Элементы на нечетных местах расположить в порядке...
C++ Массивы http://www.cyberforum.ru/cpp-beginners/thread33875.html
Вариант 7. В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) номер максимального элемента массива; 2)произведение элементов массива, расположенных между первым и вторым нулевыми элементами. Преобразовать массив таким образом, чтобы в первой половине располагались элементы, состоящие в нечетных позициях, а во второй половине -
C++ Файловый менеджер Помогите пожалуйста!!! Мне нужен файловый менеджер на Win32... (не знаю как отоброзить содержимое директории..) заранее спасибо подробнее

Показать сообщение отдельно
Фантазерка
 Аватар для Фантазерка
9 / 9 / 2
Регистрация: 04.04.2009
Сообщений: 25
13.05.2009, 10:20     Нахождение числа Пи с заданной точностью
Помогите пожалуйста с задачей:

Найти значени Пи по формуле
рисунок 1
Вычислить трижды с точностью 0,01 0,001 и 0,0001


Есть сомнения, что приведенная в моем задании формула не совсем корректная (рис1).

Это я нашла в инете:

В 1671 году Джеймс Грегори установил, что:

Этот результат позволил Лейбницу получить очень простое выражение для PI, а именно:

или, после умножения на 4:

Просуммируйте этот ряд и Вы получите число PI.

РИСУНОК 2

Однако, как говорил Козьма Прутков, 'нельзя объять необъятное', что, в применении к данному случаю, можно перефразировать так: нельзя просуммировать бесконечное число слагаемых за конечное время, каким бы быстрым компьютером мы не располагали.

Слава Богу, этого и не требуется. Поскольку мы хотим найти не точное значение PI, а лишь его приближение с пятью верными десятичными знаками, нам достаточно просуммировать такое количество первых членов ряда, чтобы сумма всех оставшихся членов не превышала 10-5.

Остался, правда, открытым вопрос о том, сколько же все-таки членов ряда нужно просуммировать, чтобы получить результат с требуемой точностью?

Ответ на этот вопрос в 'общем виде' выходит далеко за рамки настоящего обсуждения. Это отдельная тема в курсах математического анализа и численных методов.

К счастью, данный конкретный ряд позволяет найти очень простое правило, позволяющее определить момент, когда следует прекратить суммирование. Дело в том, что ряд Грегори является знакопеременным и сходится равномерно (хотя и медленнее, чем хотелось бы). Это означает, что для любого нечетного n, сумма первых n членов ряда всегда дает верхнюю оценку для PI, а сумма n+1 первых членов ряда - нижнюю.

Значит, как только разница между верхней и нижней оценками окажется меньше, чем требуемая точность, можно смело прекращать вычисления и быть уверенным, что как та, так и другая оценки отличаются от истинного значения PI не более, чем на 10-5. В качестве окончательного результата разумно взять среднее значение между полученными верхней и нижней оценками. Таким образом, можно предложить алгоритм, приведенный ниже.

Положить n=0, S1 = 0 и S2 = 0; ( начальные установки )
Увеличить n на 1; ( n становится нечетным )
Вычислить S1 = S2 + 4/(2n-1); (S1 - есть верхняя оценка )
Увеличить n на 1; ( n становится четным )
Вычислить S2 = S1 - 4/(2n-1); (S2 - есть нижняя оценка)
Если S1 - S2 >= 10^(-5) перейти к шагу 2;
( нужная точность еще не достигнута )
Напечатать результат (S1 + S2) / 2

При реализации этого алгоритма на машине следует помнить, что ряд Грегори сходится достаточно медленно, и поэтому n может принимать довольно большие значения.


Это мои попытки:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <stdio.h>  
float Pi,s1,s2;
int n;
    
void main (void)
 
{
printf ("\nLet's begin\n");
n=0;
s1=0;
s2=0;
 
do
{
++n;
s1=(s2+4/(2*n-1));
n++;
s2=(s1-(4/(2*n-1)));
}
while ((s1-s2)<=0.01);
 
Pi=(s1+s2)/2;
printf ("\nChislo Pi=%1.2f\n",Pi);
 
n=0;
s1=0;
s2=0;
 
do
{
++n;
s1=(s2+4/(2*n-1));
n++;
s2=(s1-4/(2*n-1));
}
while ((s1-s2)<=0.001);
 
Pi=(s1+s2)/2;
printf ("\nChislo Pi=%1.3f\n",Pi);
 
n=0;
s1=0;
s2=0;
do
{
++n;
s1=(s2+4/(2*n-1));
n++;
s2=(s1-4/(2*n-1));
}
while ((s1-s2)<=0.0001);
 
Pi=(s1+s2)/2;
printf ("\nChislo Pi=%1.4f",Pi);
printf ("\nBye!\n");
 
}
Миниатюры
Нахождение числа Пи с заданной точностью   Нахождение числа Пи с заданной точностью  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 03:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru