Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2013, 15:55   #1
Sorento2
Пользователь
 
Регистрация: 13.11.2012
Сообщений: 41
По умолчанию Разложение в ряд. Не правильно считает.

Программа высчитывает значение функции и значение этой функции через ряд в данной точке.
Вроде все высчитывается. Но при х>6 ну или где то около этого начинают огромные числа выводится.
Вводил большую-маленькую точность. Уменьшал шаг. Все равно получается не то.
Посмотрите пожалуйста в чем ошибка.

Код:
// asd.cpp : main project file.

#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <math.h>

#define pi 3.1415

long faktorial(int n) // ------------------------
{
int i;
long p=1; // -------------------------------
for(i=1;i<=n;i++)
p*=i;
return p;
}
int main(){
double x0 = 0, xk = 6, Dx = 1, y_0, y_1,toch=0.1;
int  k, sdvig = 0;
double max, a;
double j, y;
for(j=x0; j<=xk; j+=0.1)
{
	y=cos(j);
	y_1=0.0;
	k=0.0;
     do   
    {
		if(k>10)
			break;
        y_0=pow(-1.0, k)*pow(j, 2*k)/faktorial(2*k);
        y_1+=y_0;
        k++; 
    }while(fabs(y_1-y)>=toch);
	printf("%f  %f  %i\n", y, y_1, k);
}


getch();
	return 0;
}
Sorento2 вне форума Ответить с цитированием
Старый 29.05.2013, 17:46   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Почитайте про факториал: это очень быстро растущая функция, как раз от 7 и выше она обычно и выходит за пределы типа int. В дельфях есть типы longint И int64 (не знаю, как они в си), у них факториал можно считать до 12.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 29.05.2013, 18:28   #3
Sorento2
Пользователь
 
Регистрация: 13.11.2012
Сообщений: 41
По умолчанию

Так даже если я представляю факториал с типом long double(3,4 * 10 в 4932) у меня все равно выходит то что изображено на картинке.
Изображения
Тип файла: jpg аа.JPG (71.1 Кб, 40 просмотров)
Sorento2 вне форума Ответить с цитированием
Старый 30.05.2013, 09:44   #4
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Это разложение косинуса в ряд тейлора, правильно понимаю?
Что-то мне кажется, что у Вас точность неправильно считается. Вроде текущий элемент должен быть больше эпсилон, а не разность текущего с предыдущим.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 30.05.2013, 10:23   #5
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Что-то мне кажется, что у Вас точность неправильно считается. Вроде текущий элемент должен быть больше эпсилон, а не разность текущего с предыдущим.
И это неправильно. Нужно оценивать хвост суммы сверху и требовать, чтобы эта оценка была менее eps. Что не вполне тривиально.

Цитата:
Так даже если я представляю факториал с типом long double(3,4 * 10 в 4932) у меня все равно выходит то что изображено на картинке.
Код изменённой функции faktorial приведите.
А вообще-то, следующее слагаемое нужно считать по предыдущему, а не с нуля.
Также напоминаю, что pow() не гарантирует верного результата, если первый аргумент отрицателен (из-за того, что второй аргумент приводится к типу double, так что можете внезапно начать считать (-1)^(7.000000001), что не определено).
Abstraction вне форума Ответить с цитированием
Старый 30.05.2013, 10:57   #6
Sorento2
Пользователь
 
Регистрация: 13.11.2012
Сообщений: 41
По умолчанию

у меня сейчас в другом проблема уже)
да, точность я считаю не так(просто здесь пробовал).


этот ряд просто у меня используется в приложении Winapi. и если я указываю типом этой функции факториала long double (или даже double) приложение просто повисает и все.

в простом консольном приложении все считается прекрасно. но в winapi проблема.

Код:
long double faktorial(int n) // ------------------------
{
int i;
long double p=1; // -------------------------------
for(i=1;i<=n;i++)
p*=i;
return p;
}

Последний раз редактировалось Sorento2; 30.05.2013 в 11:02.
Sorento2 вне форума Ответить с цитированием
Старый 30.05.2013, 11:13   #7
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
этот ряд просто у меня используется в приложении Winapi. и если я указываю типом этой функции факториала long double (или даже double) приложение просто повисает и все.
Установите точный момент, когда происходит зависание.
Abstraction вне форума Ответить с цитированием
Старый 30.05.2013, 11:17   #8
Sorento2
Пользователь
 
Регистрация: 13.11.2012
Сообщений: 41
По умолчанию

Сразу при запуске приложения. То есть окно с приложением выводится, но дальше просто висит и все. Никакие действия далее не воспринимаются.
Sorento2 вне форума Ответить с цитированием
Старый 30.05.2013, 11:52   #9
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Сразу при запуске приложения. То есть окно с приложением выводится, но дальше просто висит и все. Никакие действия далее не воспринимаются.
То есть, до вызова функции faktorial? Тогда она тут ни при чём.
То есть, никакой Ваш код не отрабатывает, вообще? Убедитесь в этом. Закомментируйте весь код.
Abstraction вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задана функция логарифмического синуса и ее разложение в ряд. Разработайте алгоритм вычисления разложения в ряд с погрешностью ξ пышь-пышь Помощь студентам 4 17.05.2013 07:49
C# Разложение в ряд Тейлора EvgeniyPR Помощь студентам 4 11.11.2012 23:39
Разложение функции в ряд Dmitry333 Помощь студентам 10 23.01.2012 16:49
разложение в ряд фурье(С/С++) Lyt Помощь студентам 2 19.12.2011 23:38
Разложение в ряд Маклорена Mari Помощь студентам 2 03.02.2008 23:23