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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.05.2008, 15:44   #1
Ceprey
Пользователь
 
Регистрация: 01.03.2008
Сообщений: 47
По умолчанию решение уравнение методом подбора, вопрос

Здравствуйте! Вот код очень примитивного алгоритма решения квадратного уравнения методом подбора. Конечно же, очень сырой, надо над ним работать, но уже сейчас столкнулся с проблемой. В данной прогемме задано уравнение x*x-9*x + 18 = 0. Когда задаю шаг подбора 0.5 или 1, программа находит корень; если шаг 0.2 или меньше (я пробовал 0.1, 0.01), то именно когда цикл доходит до значения х=3 (один из корней), то почему-то значение у - какой-то мусор. Уж очень распирает узнать, почему нельзя поставить шаг 0.01. Можно было подумать, что проблемы возникают с типом double и потерей точности при вычислении промежуточных результатов - так ведь с шагом 0.5 получается.

Код:
#include <iostream.h>

void main()
{
//cout<<"Vvedite koefficent a: "<<endl;
double a;
//cin>>a;
//cout<<"Vvedite koefficent b: "<<endl;
double b;
//cin>>b;
//cout<<"Vvedite svobodnyi chlen c: "<<endl;
double c;
//cin>>c;
a=1.0;
b=-9.0;
c=18.0;

double x1;
double y;
for (double x =(-100.0); x<100.0; x+=.5) // задается шаг
{
	y=(a*x*x)+(b*x)+c;
	cout<<x<<"  "<<y<<endl; // выводятся промежуточные значения при подборе

	if (y== 0)
	{x1=x; break;}

}

	

	

cout<<"odin iz korney "<<x1<<endl;
cout<<"y="<<y<<endl;

}
Ceprey вне форума Ответить с цитированием
Старый 02.05.2008, 16:38   #2
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Нельзя переменную вещественного типа сравнивать с нулем
Код:
    if (y== 0)  
    {x1=x; break;}
она всегда вычисляется с какой-то погрешностью, связанной с машинной арифметикой.
Код:
    if (y <= 1e-6)
    {x1=x; break;}
_Dmitry вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение СНАУ методом Ньютона Tina Помощь студентам 7 09.04.2012 08:52
Решение СЛУ методом Гаусса-Джордана Жизнь Помощь студентам 2 05.10.2008 16:23
Решение нелинейного уравнения методом Ньютона Tina Общие вопросы C/C++ 2 04.06.2008 21:48
Решение системы диф уранений методом Эйлера Richi Microsoft Office Excel 5 13.05.2008 11:36