Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 20.09.2015
Сообщений: 103

Рассчитать Пи, как сумму бесконечного ряда

28.09.2015, 18:28. Показов 2637. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дана формула:

Пи = 4 - 4 / 3 + 4 / 5 - 4 / 7 + 4 / 9 - 4 / 11 ...

Правильно ли я понял, что нужно просто делать всё по формуле, пока не вычислится то самое число Пи? Из школы помню, что вроде значение 3.14, но это ведь округлено, каково должно быть условие в цикле?
C++
1
2
3
4
5
6
7
8
9
10
double P = 4;
    int n = 3;
 
    while(P != 3.14) // вряд ли мы попадем именно в это значение ?
    {
        P -= 4 /  n;
        n += 2;
        P += 4 / n;
        n += 2;
    }
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.09.2015, 18:28
Ответы с готовыми решениями:

Рассчитать сумму бесконечного ряда
2) Рассчитать сумму бесконечного ряда с точностью до \varepsilon , где x - \frac{x^3}{3!}+\frac{x^5}{5!}- ...\; ,\; x\in \left( -1;\,...

Рассчитать сумму членов бесконечного ряда
рассчитать сумму членов бесконечного ряда с заданной пользователем точностью ε для заданного пользователем значения X є (-1;1) ;...

Рассчитать сумму членов бесконечного ряда с заданной точностью
Рассчитать сумму членов бесконечного ряда с заданной точностью Е для заданного пользователем значения хє(-1;1):...

23
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
28.09.2015, 18:52
Обычно задаётся точность, по которой определяют конец суммирования.
0
0 / 0 / 0
Регистрация: 20.09.2015
Сообщений: 103
28.09.2015, 18:58  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
Обычно задаётся точность, по которой определяют конец суммирования.
Т.е. в условии цикла задать диапазон?
0
Модератор
Эксперт С++
 Аватар для zss
13766 / 10960 / 6490
Регистрация: 18.12.2011
Сообщений: 29,233
28.09.2015, 19:19
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
#define _USE_MATH_DEFINES
#include <cmath>
#include <iostream>
 
using namespace std;
 
 
int main()
{
    int n = 1;
    double an=4.;
    double P=0;
    double eps=1e-8;// точность 8 цифр
    while(fabs(an)>eps) // крутим пока очередной член ряда больше заданной точности 
    {
        P +=an;
        n+=2;
        an*=-double(n-2)/n;
    }
    cout.precision(10);
    cout <<"P="<<P<<" eps="<<fabs(P-M_PI)<< "\n";
    system("pause");
    return 0;
}
eps меньше, чем 2e-9 не задавайте. Или сделайте n тоже double.
Имейте ввиду ряд сходится очень медленно.
Release версия считается 6 сек для eps=2e-9 на процессоре AMD Phenom II X6 1090T
1
0 / 0 / 0
Регистрация: 20.09.2015
Сообщений: 103
28.09.2015, 20:09  [ТС]
Цитата Сообщение от zss Посмотреть сообщение
Имейте ввиду ряд сходится очень медленно.
Да мне лишь бы понять как это работает, я в математике фуфел.

Добавлено через 4 минуты

Не по теме:

Голова не работает. Потом разберу. Спасибо.



Добавлено через 1 минуту

Не по теме:

zss, немного не в тему, но как можно подтянуть мат. часть? У меня математике на уровне 9 класса где-то. Что почитать? Если можно, в лс.

0
0 / 0 / 0
Регистрация: 20.09.2015
Сообщений: 103
30.09.2015, 16:58  [ТС]
zss, я вернулся к этому. Что это такое и почему не компилируется?
C++
1
C:\Users\dmitr_000\Documents\p5ex5p19\main.cpp:19: ошибка: C2065: 'M_PI' : undeclared identifier
Добавлено через 2 минуты
Просто хочу разобраться, а чтоб разобраться, нужно, чтобы ваш код скомпилировался, чтоб я знал, что результат есть.
0
Модератор
Эксперт С++
 Аватар для zss
13766 / 10960 / 6490
Регистрация: 18.12.2011
Сообщений: 29,233
30.09.2015, 16:59
C++
1
2
#define _USE_MATH_DEFINES
#include <cmath>
Должно быть написано именно в таком порядке.
0
0 / 0 / 0
Регистрация: 20.09.2015
Сообщений: 103
30.09.2015, 17:05  [ТС]
Цитата Сообщение от zss Посмотреть сообщение
Должно быть написано именно в таком порядке.
В таком и написано. У меня QT.
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
#include <QCoreApplication>
 
#define _USE_MATH_DEFINES
#include <cmath>
 
#include <iostream>
using namespace std;
 
int main(int argc, char *argv[])
{
    int n = 1;
        double an=4.;
        double P=0;
        double eps=1e-8;// точность 8 цифр
        while(fabs(an)>eps) // крутим пока очередной член ряда больше заданной точности
        {
            P +=an;
            n+=2;
            an*=-double(n-2)/n;
        }
        cout.precision(10);
        cout <<"P="<<P<<" eps=" << (P-M_PI)<< "\n";
 
    QCoreApplication a(argc, argv);
 
    return a.exec();
}
0
Модератор
Эксперт С++
 Аватар для zss
13766 / 10960 / 6490
Регистрация: 18.12.2011
Сообщений: 29,233
30.09.2015, 17:07
Ну, значит в QT таких констант нет. Задайте самостоятельно.
C++
1
#define M_PI       3.14159265358979323846
0
0 / 0 / 0
Регистрация: 20.09.2015
Сообщений: 103
30.09.2015, 17:11  [ТС]
Цитата Сообщение от zss Посмотреть сообщение
Задайте самостоятельно
Задал, ничего не выводит, надо разобраться мне.
0
Модератор
Эксперт С++
 Аватар для zss
13766 / 10960 / 6490
Регистрация: 18.12.2011
Сообщений: 29,233
30.09.2015, 17:16
Попробуйте погрешность задать побольше
C++
1
 double eps=1e-3;// точность 3 цифры
0
0 / 0 / 0
Регистрация: 20.09.2015
Сообщений: 103
30.09.2015, 17:18  [ТС]
Цитата Сообщение от zss Посмотреть сообщение
Попробуйте точность задать побольше
В студии всё окей. Можете прояснить кое-что?
Что значит?
Цитата Сообщение от wismbel Посмотреть сообщение
an*=-double(n-2)/n;
Почему умножаем и что конкретно значит double перед скобками?
0
Модератор
Эксперт С++
 Аватар для zss
13766 / 10960 / 6490
Регистрация: 18.12.2011
Сообщений: 29,233
30.09.2015, 17:28
an-2 = 4/(n-2)
an =- 4/(n)=-4/(n-2)*(n-2)/(n)=-a(n-2) *(n-2)/n
Записываем это итерационной формулой
C++
1
an=-an*(n-2)/n;
или
C++
1
an*=-(n-2)/n;
однако, если n целое, то при делении (n-2)/n получим ноль. Приводим числитель к double
C++
1
an*=-double(n-2)/n;
1
0 / 0 / 0
Регистрация: 20.09.2015
Сообщений: 103
30.09.2015, 17:38  [ТС]
Цитата Сообщение от zss Посмотреть сообщение
Приводим числитель к double
А
C++
1
static_cast<double>(n-2)
не прокатит? Делал такое, только с одним значением.
0
Модератор
Эксперт С++
 Аватар для zss
13766 / 10960 / 6490
Регистрация: 18.12.2011
Сообщений: 29,233
30.09.2015, 17:48
Лучший ответ Сообщение было отмечено wismbel как решение

Решение

Результат одинаковый, первый вариант - это приведение в стиле Си
Второй - в стиле С++

В принципе, можете обойтись без приведения.
Заведите константу
C++
1
double sign=4.0;
Тогда можно обойтись без рекуррентной формулы
C++
1
2
3
4
5
6
7
8
9
10
11
double an=4.;
        double P=0;
        double sign=4.0;
        double eps=1e-8;// точность 8 цифр
        while(fabs(an)>eps) // крутим пока очередной член ряда больше заданной точности
        {
            P +=an;
            n+=2;
            sign=-sign;
            an=sign/n;
        }
1
0 / 0 / 0
Регистрация: 20.09.2015
Сообщений: 103
30.09.2015, 17:55  [ТС]
Цитата Сообщение от zss Посмотреть сообщение
Тогда можно обойтись без рекуррентной формулы
А вот это уже намного понятнее. Большое спасибо.
0
Модератор
Эксперт С++
 Аватар для zss
13766 / 10960 / 6490
Регистрация: 18.12.2011
Сообщений: 29,233
30.09.2015, 18:04
Цитата Сообщение от zss Посмотреть сообщение
an*=sign/n;
Пардон, забыл убрать знак *
C++
1
an=sign/n;
1
0 / 0 / 0
Регистрация: 20.09.2015
Сообщений: 103
01.10.2015, 15:06  [ТС]
Цитата Сообщение от zss Посмотреть сообщение
2e-9
А где можно почитать про это? Что-то подобное впервые встретил, помню, еще на калькуляторах что-то подобное было. В общем, какие-то сокращения.
0
267 / 170 / 40
Регистрация: 25.08.2014
Сообщений: 1,087
Записей в блоге: 1
01.10.2015, 15:09
Цитата Сообщение от wismbel Посмотреть сообщение
А где можно почитать про это?
Страуструп
0
0 / 0 / 0
Регистрация: 20.09.2015
Сообщений: 103
01.10.2015, 15:10  [ТС]
Цитата Сообщение от Enno Посмотреть сообщение
Страуструп
такого рода сокращения только в С++? Я думал, что-то с математикой связано.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.10.2015, 15:10
Помогаю со студенческими работами здесь

Рассчитать сумму членов бесконечного ряда с заданной пользователем точностью
Рассчитать сумму членов бесконечного ряда с заданной пользователем точностью е для заданного пользователем значения хє(-1;1): 1 + x^2/2!...

Рассчитать значение п на основании бесконечного ряда
У Дейтлов есть задача: Это программа должна вывести п = 4 + 4/3 = 4*(4/3) = 16/3 16/3 * 4/5 = 48/15 и т.д.?

Нужно найти сумму бесконечного ряда ln(1+x)=x-x^2/2+x^3/3-x^4/4 и т.д.(как написать програму?)
как написать програму?

Рассчитать сумму бесконечного ряда
помогите решить и если можно то с объяснением

Рассчитать сумму бесконечного ряда
Доброго времени суток) Возникла такая проблема... Задача такая - нужно рассчитать сумму бесконечного ряда. y=1-1/2!+1/3!_1/4!..... ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru