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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.09.2010, 22:26   #1
Xeon1024
 
Регистрация: 30.05.2010
Сообщений: 9
Радость Вопрос по программе, Нужно протабулировать ф-цию

Приветствую вас дамы и господа
Тут такое дело...

Код:
# include <iostream.h>
# include <conio.h>
# include <math.h>

// Считает значение функции
float Schet_F(float X)
{
 if (X + 5 < 0) return 1/(2 * X) - 10;
 else return (X - sin(X)) / X;
}

// Херачит цикл и выводит табулирование
void While_F (float X_s, float X_e, float X_st)
{
 while (X_s <= X_e)
 {
  if (X_s != 0)
  {
  cout<< "x= "<< X_s<< "   ";
  cout<< "F(x)= "<< F(X_s)<< endl;
  X_s = X_s + X_st;
  }
 }
}

// Майн...ну что тут сказать...
void main(void)
{
clrscr();
float X_start, X_end, step_X;
cout<< "X_start= "; cin>> X_start;
cout<< "X_end= "; cin>> X_end;
cout<< "step_X= "; cin>> step_X;
While_F(X_start, X_end, step_X);
getch();
}
Результат:

Вопросы:
- Почему когда Х должен быть равен -0,1 он равен -0,099999 ?
- Почему выводится Х, когда он равен нулю?
- Почему не выводится конечное значение Х (последняя строка)?
Xeon1024 вне форума Ответить с цитированием
Старый 25.09.2010, 22:53   #2
sergey.d
Пользователь
 
Регистрация: 23.08.2010
Сообщений: 98
По умолчанию

Вещественные числа в машинной арифметике представляются не точно. Почитай вот это: http://www.sgu.ru/prcnit/teach/3.php

Для повышения точности в программе можно использовать тип double вместо float
sergey.d вне форума Ответить с цитированием
Старый 26.09.2010, 00:26   #3
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

На все три вопроса один ответ - потеря точности при работе с вещественными числами. Первые две проблемы можно попытаться решить округлением до определённого знака, третью проверкой не
Код:
 while (X_s <= X_e)
а
Код:
 while (X_s <= X_e + eps)
где eps достаточно малая константа
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 26.09.2010, 19:04   #4
Xeon1024
 
Регистрация: 30.05.2010
Сообщений: 9
По умолчанию

Спасибо. Разобрался, увеличив числа в 100 раз
Xeon1024 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Список в Прологе, нужно исправить ошибки в программе Roxanne Помощь студентам 0 16.07.2010 07:42
Нужно приткнуть dup2() в правильное место в программе 0xDEFACE Общие вопросы C/C++ 3 21.06.2010 11:36
Нужно найти ошибку в программе (С++) STIFFmaster_LP Помощь студентам 13 24.01.2010 00:44
Нужно сохранить информацию в программе Alex_09 Общие вопросы Delphi 10 23.03.2009 18:41