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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2011, 00:12   #1
Prokill
 
Регистрация: 09.11.2011
Сообщений: 7
По умолчанию Ряд тэйлора, код есть , не считает точность

значения от -0.5 до 0.5 с шагом 0.1 и точностью 0.000001
http://s005.radikal.ru/i209/1111/24/d0670bc45351.jpg


ввожу точность 0.000001 а значения такие же и остаются(
помогите


#include <stdio.h>
#include <math.h>
#include <float.h>
int main(){
const int MaxIter=500;
double xn,xk,dx,eps;
printf("enter xn,xk,dx,eps\n");
scanf("%lf%lf%lf%lf",&xn,&xk,&dx,&e ps);
printf("\n|X|acos|Y|n|");
printf("\n_________________________ ________");
for (double x=xn;x<=xk;x+=dx){
double ch=1,y=x,z,s=0;
z=acos(x);
for(int n=1;fabs(ch)>eps&&n<MaxIter;n+=2){
ch*=((2*n-1)*pow(x,2*n+1))/(2*n*(2*n+1));
y=y+ch;
s=s+1;}
y=(3.1415926/2)-y;
if(n<MaxIter)printf("\n|%9.2lf|%9.5 lf|%9.5lf|%9d|\n",x,z,y,int(s));
else printf("\n Ryad rashoditsya!");
}
return 0;
}
Prokill вне форума Ответить с цитированием
Старый 09.11.2011, 13:04   #2
zmejchik
Пользователь
 
Регистрация: 30.05.2009
Сообщений: 10
По умолчанию

По моему все работает, просто члены итерации ch очень быстро уменьшаются по модулю, поэтому и не заметно разницы в получаемых значениях. Можешь в этом убедиться если выведешь на экран после каждой итерации получаемые значения ch.

Цитата:
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <float.h>

int main(){
const int MaxIter=500;
double xn,xk,dx,eps;
printf("enter xn,xk,dx,eps\n");
scanf("%lf%lf%lf%lf",&xn,&xk,&dx,&e ps);
printf("\n|X|acos|Y|n|");
printf("\n_________________________ ________");
for (double x=xn;x<=xk;x+=dx)
{
double ch=1,y=x,z,s=0;
z=acos(x);
int n;

for(n=1;fabs(ch)>eps&&n<MaxIter;n+= 2)
{ std::cout<<"ch="<<ch<<" ";//Вывод до итерации выполняемой в цикле
ch*=((2*n-1)*pow(x,2*n+1))/(2*n*(2*n+1));
std::cout<<"ch="<<ch<<"\n";//Вывод после итерации выполняемой в цикле
y=y+ch;
s=s+1;
}
y=(3.1415926/2)-y;
if(n<MaxIter)printf("\n|%9.2lf|%9.5 lf|%9.5lf|%9d|\n",x,z,y,int(s));
else printf("\n Ryad rashoditsya!");

}
std::cin.get();
std::cin.get();
return 0;
}

Последний раз редактировалось zmejchik; 09.11.2011 в 13:09.
zmejchik вне форума Ответить с цитированием
Старый 09.11.2011, 17:21   #3
Prokill
 
Регистрация: 09.11.2011
Сообщений: 7
По умолчанию

Цитата:
Сообщение от zmejchik Посмотреть сообщение
По моему все работает, просто члены итерации ch очень быстро уменьшаются по модулю, поэтому и не заметно разницы в получаемых значениях. Можешь в этом убедиться если выведешь на экран после каждой итерации получаемые значения ch.
спс, но до меня препод докапывается , что типа не видно разницы что я ввожу точность 0.0001 и 0.000001
Prokill вне форума Ответить с цитированием
Старый 11.11.2011, 12:33   #4
zmejchik
Пользователь
 
Регистрация: 30.05.2009
Сообщений: 10
По умолчанию

Единственно что могу предложить, округлять полученные значения до требуемой точности, пример если точность 0,01 то округлять до сотых итд.
zmejchik вне форума Ответить с цитированием
Старый 12.11.2011, 09:02   #5
Prokill
 
Регистрация: 09.11.2011
Сообщений: 7
По умолчанию

а как это сделать?
Prokill вне форума Ответить с цитированием
Старый 13.11.2011, 16:27   #6
zmejchik
Пользователь
 
Регистрация: 30.05.2009
Сообщений: 10
По умолчанию

Округлением занимаются floor и ceil из <math.h> (в C++ — std::floor, std::ceil из <cmath>).

Есть еще такой метод Округление до тысячных : (число*1000+0.5) преобразуем к типу целых и делим на 1000.

Последний раз редактировалось zmejchik; 14.11.2011 в 11:31.
zmejchik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программка в Борланд Си... Программа есть... Ошибку не высвечивает но и не считает... Спасайте... Катюшенька Помощь студентам 1 18.05.2009 22:21
ряд Тэйлора ,посмотрите если не сложно танечка155 Паскаль, Turbo Pascal, PascalABC.NET 1 28.11.2008 19:41
Работа по Паскалю, Ряды Тэйлора. Dexterello Помощь студентам 4 28.11.2008 05:53
Есть код!! Danilyuk Помощь студентам 1 31.05.2008 00:46
помогите с задачей! ряд тэйлора heartdrive Паскаль, Turbo Pascal, PascalABC.NET 10 11.05.2008 22:05