Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Hexcry
0 / 0 / 0
Регистрация: 16.02.2017
Сообщений: 8
1

Выводит -1.#IND вместо значения переменной

16.02.2017, 01:27. Просмотров 566. Ответов 5

Здравствуйте, очень долго бьюсь с проблемой. заключается она в следующем. Есть ряд Тейлора для sin(x)/x который равен(сразу распишу) sum += pow((-1.0),n)*pow(x1,n*2)/(Fact(n*2+1)) при увеличении n, но вот в чем проблема: при выводе дает одно значение а остальные заменят на -1.#IND. что делать не знаю подскажите пожалуйста. тестовые значения 1 1 10.
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
#include <iostream>
#include <math.h>
#include <iomanip>
 
using namespace std; 
 
int Fact(int x) 
{ 
    int fc = 1;
    for(int i = 1; i <= x; i++)
        fc *= i;
    return fc;
}
 
int main()
{
    long double sum = 0.0;
    int n = 0;
    double epsilon = 1e-006;
    long double dx = 0.0, x1 = 0.0, x2 = 0.0;
 
    cout << "input dx, x1, x2 -> ";
    cin>> dx >> x1 >> x2;
    cout << endl;
 
    for(int i = 0; i <  30; i++) cout << "_";
    cout << endl;
 
    cout << "|"<< setw(3) << "X" << setw(3) << "|" << setw(10) << "SUM" << setw(7) << "|" << setw(3) << "N" << setw(3)<< "|"<<"\n|";
 
    for(int i = 0; i <  28; i++) cout << "_";
    cout << "|" << endl;
 
    for (; x1 < x2; x1+=dx){
        n = 0;
 
        do{ sum += pow((-1.0),n)*pow(x1,n*2)/(Fact(n*2+1)); n++;}
        while(sin(x1)/x1 - epsilon > sum || sum > sin(x1)/x1 + epsilon);
 
        cout << "|" << setw(3) << x1 <<setw(3)<< "|" << setw(10) <<  sum << setw(7) << "|" << setw(3) << n << setw(3)<< "|" << endl;
 
    }
 
    for(int i = 0; i <  30; i++) cout << "_";
    cout << endl;
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.02.2017, 01:27
Ответы с готовыми решениями:

Выводит INF вместо значения
Не ругайте за стиль , только учусь. проблема с выводом значения X строка 63,68....

Программа выводит nan ind
Исходные данные: a=4; b=5; eps=0.0001; Выводит: xz=-nan(ind); k=5;...

Задачка с рядами Тейлора выводит -1.#IND
Вчера писали программу для рекуррентных рядов. Функция выдает решение, а вот с...

Выводится адрес переменной, вместо ее значения
Пишу программу просмотра логинов и паролей из хрома. Все работает, за...

Программа не выводит значения переменной
Мне нужно, чтобы программа выводила на эран значения переменной. Компилятор...

5
Hexcry
0 / 0 / 0
Регистрация: 16.02.2017
Сообщений: 8
16.02.2017, 01:31  [ТС] 2
Вот скрин работы программы...
0
Миниатюры
Выводит -1.#IND вместо значения переменной  
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4802 / 2453 / 687
Регистрация: 18.10.2014
Сообщений: 4,226
16.02.2017, 01:44 3
1. Кто будет обнулять sum перед каждым новым вычислением? Пушкин?

2. Максимальный факториал, который поместится в 32-битный int - это 12!. С чего вы взяли, что ваши итерации закончатся быстрее? При таком epsilon никакой стандартный целочисленный тип не в состояни представить требуемые факториалы.

3. А что сказал дебаггер?

---

4. Что за манера, использовать pow для вычисления целочисленных степеней?
5. Что за манера, лепить большое количество интсрукций в одну строчку? Как это потом отлаживать?
6. Что за манера, объявлять все переменные кучей в начале функции?
1
Hexcry
0 / 0 / 0
Регистрация: 16.02.2017
Сообщений: 8
16.02.2017, 01:56  [ТС] 4
Спасибо, часть советов помогли. Стыдно что не заметил что не обнуляю sum.. обнуляю sum, сократил epsilon до 1e-002, факториал лонговский.
Что-то несомненно помогло, но к сожалению до заветной 10ки не доходит. теперь считает хотя бы до 4 ого значения.. но все равно хотелось бы исправить код до полностью рабочего.
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4802 / 2453 / 687
Регистрация: 18.10.2014
Сообщений: 4,226
16.02.2017, 02:05 5
Цитата Сообщение от Hexcry Посмотреть сообщение
но все равно хотелось бы исправить код до полностью рабочего.
При использовании компилятора GCC я воспользовался нестандартным типом __uint128_t для вычисления факториала, и его хватает.

http://coliru.stacked-crooked.com/a/bbd22df8c223d7c2

Но 64-битного типа - не хватает.
1
Hexcry
0 / 0 / 0
Регистрация: 16.02.2017
Сообщений: 8
16.02.2017, 02:08  [ТС] 6
Спасибо большое!
0
16.02.2017, 02:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2017, 02:08

Метод Якоби. Выводит результат -1.INF и -1.IND
Вот сделал прогу, но почему-то вместо нормального результата выводит это:...

Интерполяция методом Ньютона: вывод -1.#IND вместо нужных значений
Написал программу для интерполяции методом Ньютона. Вместо нормальных цифр,...

-1.#IND при возвращении значения функции
#include&lt;iostream&gt; using namespace std; float res=0; float number() {...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru