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

Выводит #infoo при подсчёте суммы ряда - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
aleksand
21 / 9 / 2
Регистрация: 18.06.2011
Сообщений: 185
13.10.2012, 00:09     Выводит #infoo при подсчёте суммы ряда #1
Если я ввожу "x" очень большой(100 например), то программа не работает выводя кучу строк подряд что-то типа #infoo. При этом "e" может быть любым. Подскажите в чём дело? Как решить данную проблему?
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
#include <stdio.h>
#include <math.h>
 
int main()
{   
    double a, b, c, d, f, g ,h, m, i;
    float x, e;
    int n;
    h=0;
 
 
    printf("vvedite x\n");
    scanf("%f", &x);
    printf("vvedite e\n");
    scanf("%f", &e);
    for(n=1;;n++) {
    
        a=pow(-1.0, n); //степень 1
        b=pow(x, 2*n+1); // степень 2
        c=a*b; //произведение этих степеней
 
        d=1; // переменная для факториала
        f=2*n+1; //факториал какого числа считаем
        for(i=1; i<=f; i++) {
        d=d*i;
        }
 
        g=c/d; //результат ряда
 
        h=h+g;
        m = fabs(g);
        printf("%d. %f\n", n, g);
        
        if((int)e==(int)m && e>=(m-(int)m)) {
        printf("%f", h);
        break;
        }
        else if(e>0 && e>=m) {
        printf("%f", h);
        break;
        }
        
 
    }
 
    getchar();
    getchar();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.10.2012, 00:09     Выводит #infoo при подсчёте суммы ряда
Посмотрите здесь:

при элементарном подсчёте косинуса компилятор выдаёт неверное значение C++
Составить программу для вычисления суммы данного ряда для указанного значения аргумента х, если известно количество N членов ряда. C++
C++ Составить программу для вычисления суммы данного ряда для указанного значения аргумента х, если известно количество N членов ряда.
Ошибка #INFOO C++
C++ Почему при подсчёте min -выдаёт 0 из списка?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
13.10.2012, 00:17     Выводит #infoo при подсчёте суммы ряда #2
Включайте отладчик и смотрите какая из функций или операций даёт результат #inf.
aleksand
21 / 9 / 2
Регистрация: 18.06.2011
Сообщений: 185
13.10.2012, 00:30  [ТС]     Выводит #infoo при подсчёте суммы ряда #3
Цитата Сообщение от John Prick Посмотреть сообщение
Включайте отладчик и смотрите какая из функций или операций даёт результат #inf.
Был бы благодарен, если бы объяснили подробно как это сделать на данном примере
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
13.10.2012, 00:56     Выводит #infoo при подсчёте суммы ряда #4
Ну как в отладчике точки останова ставить и по шагам программу проходить знаете?
Если да - ставите точку останова, например, на первой операции цикла a=pow(-1.0, n); и далее идёте по шагам, наблюдая за изменением каждой переменной.
Правда, с циклами придётся возможно пройти его не один раз, прежде чем ошибка появится. Поэтому при первом "эксперименте" можно пропускать итерацию целиком (до той же точки останова в цикле) пока не проявится ошибка, затем уже локализовать место её возникновения.
tguglanaklona
 Аватар для tguglanaklona
10 / 10 / 2
Регистрация: 06.09.2012
Сообщений: 36
13.10.2012, 01:31     Выводит #infoo при подсчёте суммы ряда #5
Цитата Сообщение от aleksand Посмотреть сообщение
Если я ввожу "x" очень большой(100 например), то программа не работает выводя кучу строк подряд что-то типа #infoo. При этом "e" может быть любым. Подскажите в чём дело? Как решить данную проблему?
Молодец! Конечно, до бесконечности считать всегда будет переполнение! Поставьте останов на цикл.

Ряд sin(x) начинается с нуля, а не с единицы. При правильной остановке Ваша программа (при замене n=1 на n=0) дает верный резулитат, т.е. sin(x) =)

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
#include <stdio.h>
#include <math.h>
#include <conio.h>
 
#define PI  3.14159
 
int main()
{
    //FILE* pf = fopen("Output.txt","w+");
 
    double a, b, c, d, f, g ,h, m, i;
    float x;
    int n;
    h=0;
 
 
    printf("vvedite x\n");
    scanf("%f", &x);
    for(n=0;;n++) {
    
        a=pow(-1.0, n); //степень 1
        b=pow(x, 2*n+1); // степень 2
        c=a*b; //произведение этих степеней
 
        d=1; // переменная для факториала
        f=2*n+1; //факториал какого числа считаем
        for(i=1; i<=f; i++) {
        d=d*i;
        }
 
        g=c/d; //результат ряда
 
        h=h+g;
        m = fabs(g);
        printf("%d. %f, h=%f\n", n, g, h);
 
    }
 
    getchar();
    
}
Вывод sin π/2:

vvedite x
1.57
0. 1.570000, h=1.570000
1. -0.644982, h=0.925018
2. 0.079491, h=1.004509
3. -0.004665, h=0.999843
4. 0.000160, h=1.000003
5. -0.000004, h=1.000000
6. 0.000000, h=1.000000
7. -0.000000, h=1.000000
8. 0.000000, h=1.000000
9. -0.000000, h=1.000000


P.S.:
Вот это непонятн чего изображено
C
1
2
3
4
5
6
7
8
if((int)e==(int)m && e>=(m-(int)m)) {
        printf("%f", h);
        break;
       }
        else if(e>0 && e>=m) {
        printf("%f", h);
        break;
        }
aleksand
21 / 9 / 2
Регистрация: 18.06.2011
Сообщений: 185
13.10.2012, 13:49  [ТС]     Выводит #infoo при подсчёте суммы ряда #6
Цитата Сообщение от tguglanaklona Посмотреть сообщение
Ряд sin(x) начинается с нуля, а не с единицы. При правильной остановке Ваша программа (при замене n=1 на n=0) дает верный резулитат, т.е. sin(x) =)
Здесь про sin вообще ничего нету)) Тут сумма ряда без sin
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
13.10.2012, 14:09     Выводит #infoo при подсчёте суммы ряда #7
Цитата Сообщение от aleksand Посмотреть сообщение
Тут сумма ряда без sin
Видимо, твой ряд является разложением в ряд функции sin. Наверное, это имел ввиду
tguglanaklona. Я не силён в рядах, не могу сказать точно, так ли это на самом деле. Грубо говоря, подставляя в ряд значение X и считая ряд до бесконечности получишь значение sin(X). Ну или значение той функции, разложение в ряд которой представлено у тебя.
В любом случае, ты должен контролировать переполнения (которые очень быстро возникают при расчёте факториалов), а также получения всяких недопустимых значений.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2012, 15:24     Выводит #infoo при подсчёте суммы ряда
Еще ссылки по теме:

C++ Выводит крокозяблы при подсчёте ряда Тейлора
C++ определить число членов ряда, необходимых для расчета с заданной погрешностью суммы членов ряда:
Найти количество итераций при подсчете суммы ряда C++

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

Или воспользуйтесь поиском по форуму:
tguglanaklona
 Аватар для tguglanaklona
10 / 10 / 2
Регистрация: 06.09.2012
Сообщений: 36
13.10.2012, 15:24     Выводит #infoo при подсчёте суммы ряда #8
Цитата Сообщение от John Prick Посмотреть сообщение
Видимо, твой ряд является разложением в ряд функции sin. Наверное, это имел ввиду
tguglanaklona. Я не силён в рядах, не могу сказать точно, так ли это на самом деле. Грубо говоря, подставляя в ряд значение X и считая ряд до бесконечности получишь значение sin(X). Ну или значение той функции, разложение в ряд которой представлено у тебя.
В любом случае, ты должен контролировать переполнения (которые очень быстро возникают при расчёте факториалов), а также получения всяких недопустимых значений.
Угу, так точно

Здесь про sin вообще ничего нету)) Тут сумма ряда без sin
Смотри сам. sin(1.57)≈1 в моем примере. Надо бы знать, че считаем. Так зачем e? =)
Yandex
Объявления
13.10.2012, 15:24     Выводит #infoo при подсчёте суммы ряда
Ответ Создать тему
Опции темы

Текущее время: 10:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru