1 / 1 / 0
Регистрация: 29.09.2021
Сообщений: 52
1

Найти сумму ряда с точностью eps, общий член которого равен:

08.11.2021, 15:51. Показов 790. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Точность считается достигнутой, если следующий член последовательности меньше заданного eps.

Название: Screenshot_1.png
Просмотров: 99

Размер: 999 байт
есть такой код, при любом eps выдает 0, не знаю как исправить

в коде должна присутствовать рекурсия.




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
#include <iostream>
#include <cmath>
#include <conio.h>
 
 
using namespace std;
 
 
int factorial(int n)
{
    if (n == 1 || n == 0) return 1;
    return n * factorial(n - 1);
}
 
int main(){
    double sum, eps;
    float e = exp(1.0);
    cout << "print eps" << endl;
    cin >> eps;
    sum = 0;
    int n = 0.2;
    while (sin(n^n)/factorial(n) > eps)
{
    sum += sin(n ^ n) / factorial(n);
    n++;
}
    cout << sum << endl;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.11.2021, 15:51
Ответы с готовыми решениями:

Найти сумму ряда с точностью ε=10-4, общий член которого равен a(n)=e^n+100^(-n)^2
Найти сумму ряда с точностью ε=10-4, общий член которого равен an=en*100-n2

Найти сумму ряда, общий член которого равен an=(2n-1)/2^n, с заданной точностью
И снова привет этому замечательному форуму, в очередной раз взываю к помощи Задание необходимо...

Найти сумму ряда, общий член которого An=((-1)^(n-1)) / (n^n), с точностью e=10-4
Найти сумму ряда с точностью e=10-4, общий член которого. C++ При определении суммы членов ряда...

Найти сумму ряда с точностью е=10^-3 ,общий член которого An = (-1)^n-1/n^n
Найти сумму ряда с точностью е=10-3 ,общий член которого An = (-1)^n-1/n^n

Найти сумму ряда с точностью, общий член которого известен
Помогите, пожалуйста. Пример в С++: Найти сумму ряда с точностью е=10^-3, общий член которого: ...

8
Модератор
Эксперт функциональных языков программированияЭксперт Python
36578 / 20308 / 4218
Регистрация: 12.02.2012
Сообщений: 33,605
Записей в блоге: 13
08.11.2021, 17:13 2
Ты знаешь, что "^" - это не возведение в степень, а исключающее или (xor). Ну, а n^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
#include <iostream>
#include <cmath>
 
using namespace std;
 
double foo(double eps)
{
    double n=1;
    double p=1;
    double a=sin(n);
    double s=0;
    while (abs(a)>eps)
    {
        s+=a;
        n++;
        p*=n;
        a=sin(pow(n,n))/p;
    }
    return s;
}
 
int main()
{
    double eps;
    cout << "eps=";
    cin >> eps;
    cout << "sum=" << foo(eps) << endl;
    return 0;
}
Добавлено через 6 минут
Ах да, там рекурсия нужна... Тогда вот:

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
#include <iostream>
#include <cmath>
 
using namespace std;
 
double foo(double eps)  // Итерация
{
    double n=1;
    double p=1;
    double a=sin(n);
    double s=0;
    while (abs(a)>eps)
    {
        s+=a;
        n++;
        p*=n;
        a=sin(pow(n,n))/p;
    }
    return s;
}
 
double bar(double eps, double n=1,double p=1,double s=0) // рекурсия
{
    double a=sin(pow(n,n))/p;
    
    if (abs(a)>eps)
       return bar(eps,n+1,p*(n+1),s+a);
    else
       return s;
}
 
int main()
{
    double eps;
    cout << "eps=";
    cin >> eps;
    cout << "sum=" << foo(eps) << endl;
    cout << "sum=" << bar(eps) << endl;
    return 0;
}
2
1 / 1 / 0
Регистрация: 29.09.2021
Сообщений: 52
11.11.2021, 21:12  [ТС] 3
спасибо, забыл что n^n не является возведением в степень.
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
11.11.2021, 21:23 4
Цитата Сообщение от lamer11 Посмотреть сообщение
n ^ n
Эттто что такое?! Возведение в степень у нас совсем не так!
И опять факториалы считают! Просто горе гореванское! Да еще рекарсией!
Креста на вас нет!

Добавлено через 4 минуты
Catstail, и ты, Брут! Любишь фокториальчики считать? Неявно, конечно. Но я-то вижу
Цитата Сообщение от Catstail Посмотреть сообщение
p*=n;
a=sin(pow(n,n))/p;
C++
1
a = sin (...) /n
Между вычислением факториала и его обратного - огромная разница!
1
Модератор
Эксперт функциональных языков программированияЭксперт Python
36578 / 20308 / 4218
Регистрация: 12.02.2012
Сообщений: 33,605
Записей в блоге: 13
12.11.2021, 08:30 5
Цитата Сообщение от Байт Посмотреть сообщение
Любишь фокториальчики считать? Неявно, конечно.
- а как по-другому? Тут важно не то, что я "считаю факторильчик", а то, что я его не пересчитываю.

Добавлено через 1 минуту
Цитата Сообщение от Байт Посмотреть сообщение
Между вычислением факториала и его обратного - огромная разница!
- согласен. В десятичных порядках.

Добавлено через 12 минут
Вот результаты эксперимента:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
 
int main()
{
    double f=1.0,p=1.0,r,diff;
    double i;
    
    cout.setf(ios::scientific);
    
    for (i=1; i<=20; i++)
    {
        f=f*i;
        p=p/i;
        r=1.0/f;
        diff=abs(r-p);
        
        cout << i << " " << f << " " << p << " " << r << " " << diff << endl;
        
    }
 
    return 0;
}

Код
1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 0.000000e+00
2.000000e+00 2.000000e+00 5.000000e-01 5.000000e-01 0.000000e+00
3.000000e+00 6.000000e+00 1.666667e-01 1.666667e-01 0.000000e+00
4.000000e+00 2.400000e+01 4.166667e-02 4.166667e-02 0.000000e+00
5.000000e+00 1.200000e+02 8.333333e-03 8.333333e-03 0.000000e+00
6.000000e+00 7.200000e+02 1.388889e-03 1.388889e-03 0.000000e+00
7.000000e+00 5.040000e+03 1.984127e-04 1.984127e-04 0.000000e+00
8.000000e+00 4.032000e+04 2.480159e-05 2.480159e-05 0.000000e+00
9.000000e+00 3.628800e+05 2.755732e-06 2.755732e-06 0.000000e+00
1.000000e+01 3.628800e+06 2.755732e-07 2.755732e-07 5.293956e-23
1.100000e+01 3.991680e+07 2.505211e-08 2.505211e-08 0.000000e+00
1.200000e+01 4.790016e+08 2.087676e-09 2.087676e-09 0.000000e+00
1.300000e+01 6.227021e+09 1.605904e-10 1.605904e-10 2.584939e-26
1.400000e+01 8.717829e+10 1.147075e-11 1.147075e-11 1.615587e-27
1.500000e+01 1.307674e+12 7.647164e-13 7.647164e-13 1.009742e-28
1.600000e+01 2.092279e+13 4.779477e-14 4.779477e-14 6.310887e-30
1.700000e+01 3.556874e+14 2.811457e-15 2.811457e-15 3.944305e-31
1.800000e+01 6.402374e+15 1.561921e-16 1.561921e-16 2.465190e-32
1.900000e+01 1.216451e+17 8.220635e-18 8.220635e-18 1.540744e-33
2.000000e+01 2.432902e+18 4.110318e-19 4.110318e-19 4.814825e-35
Разница между вычислением обратного факториала и обратной величины факториала (последняя колонка) - ничтожна...

Или я чего-то не понял?

Возможно, имеется в виду, что лучше бы рекррентную формулу вывести. Но здесь все портит nn
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
12.11.2021, 14:40 6
Цитата Сообщение от Catstail Посмотреть сообщение
Или я чего-то не понял?
Это я, видимо, плохо объясняю
C
1
2
3
f = 1;
for(i=1; i<=n; i++)
    f *= i;
Этот код при любом типе f довольно (относительно) быстро приведет к переполнению разрядной сетки, значительно быстрее, чем это произойдет для n(i)
Можно конечно, определить для какого значение хватит данного типа для данной задачи, и если оно будет превышено, принимать некие не вполне триавильные действия. Или можно считать для школьных задачек стандартных типов должно хватить, иначе они просто становятся не школьными....
А главное, на фига нам этот геморрой, если такой код
C
1
2
3
df = 1;
for(i=1; i<=n; i++)
 df /= i;
просто лишен этого недостатка!
Самое худшее, к чему он может привести, это потеря точности. Но согласитесь, это значительно меньшее беда, чем вылезание за разрядную сетку, которое делает результат абсолютно не достоверным!
1
Модератор
Эксперт функциональных языков программированияЭксперт Python
36578 / 20308 / 4218
Регистрация: 12.02.2012
Сообщений: 33,605
Записей в блоге: 13
12.11.2021, 15:30 7
Байт, но я-то работаю с данными типа double. Так что разрядная сетка не переполняется даже для 100! (а ряд сойдется раньше).

Цитата Сообщение от Байт Посмотреть сообщение
Самое худшее, к чему он может привести, это потеря точности. Но согласитесь, это значительно меньшее беда, чем вылезание за разрядную сетку,
- это как сказать... Учитывая то обстоятельство, что переполнение зачастую можно перехватить, а вот потерю значимости вряд ли.
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
12.11.2021, 16:05 8
Цитата Сообщение от Catstail Посмотреть сообщение
даже для 100!
Бесконечность этим не испугать!

Добавлено через 14 минут
Цитата Сообщение от Catstail Посмотреть сообщение
это как сказать...
Если нам нужна бОльшая точность, чем обеспечивает double, мы можем перейти к другому представлению, например, "длинкой", тут все в наших руках. Но переполнение разрядной сетки - это катастрофа!
Да, перехватить можно... Но это тоже нетривиально...
Поймите меня правильно, я смотрю это как-бы теоретически, с точки зрения бесконечности, что ли
И вычисления факториальных рядов делением по всем параметрам надежнее и проще.
1
Модератор
Эксперт функциональных языков программированияЭксперт Python
36578 / 20308 / 4218
Регистрация: 12.02.2012
Сообщений: 33,605
Записей в блоге: 13
12.11.2021, 16:25 9
Байт, я согласен, но не понимаю, в чем особая надежность.
0
12.11.2021, 16:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.11.2021, 16:25
Помогаю со студенческими работами здесь

Найти сумму ряда с точностью, общий член которого. Ответьте пожалуйста
Народ, очень прошу Вас помочь. Помогите решить пример в С++: Найти сумму ряда с точностью...

Найти сумму ряда, общий член которого задан формулой, с точностью ε
Найти сумму ряда, общий член которого задан формулой, с точностью ε (10-4)

Дан числовой ряд и величина ɛ. Найти сумму ряда с точностью ɛ, общий член которого задан формулой:
формула: an = n2/2n ɛ=10-4 На С++

Вычислить сумму ряда с точностью Е, общий член которого
2. Вычислить сумму ряда с точностью Е, общий член которого напишите программу пожалуйста не могу...

Вычислить сумму ряда с точностью Е, общий член которого
Помогите, пожалуйста, написать программу. Вычислить сумму ряда с точностью Е, общий член...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru