Вопрос по программе

Тема в разделе "Borland C++ Builder & Kylix", создана пользователем -, 25 сен 2010.

Статус темы:
Закрыта.
  1. Гость

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

    [​IMG]

    Код (C++):
    # 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();
    }

    Результат:
    [​IMG]

    Вопросы:
    - Почему когда Х должен быть равен -0,1 он равен -0,099999 ?
    - Почему выводится Х, когда он равен нулю?
    - Почему не выводится конечное значение Х (последняя строка)?
     
  2. Гость

    Ой...извеняюсь. не туда, видать, написал :)
     
  3. Trs

    Trs Гость

    Потому что 0.1 в двоичной системе счисления это бесконечная периодическая дробь 0.0(0011). Ты используешь тип float, то есть дробь будет обрезаться после 23 знаков и будет на самом деле чуть большее чем 0.1. После нескольких сложений эта ошибка накапливается и ты видишь число -0,099999. По этой же причине после 10 сложений ты получишь не 0, а в конце не получишь в точности X_e.

    Общее правило - работая с вещественными числами никогда не надейся на точное равенство.

    Между прочим из-за такой же ошибки в свое время погибло 28 американских солдат: http://www.mc.edu/campus/users/travis/syll...381/patriot.htm
     
Загрузка...
Похожие Темы - Вопрос по программе
  1. Shonny
    Ответов:
    0
    Просмотров:
    1.232
  2. ApplePen
    Ответов:
    0
    Просмотров:
    78
  3. gURaBA_N
    Ответов:
    3
    Просмотров:
    96
  4. kartaman
    Ответов:
    0
    Просмотров:
    128
  5. Peter
    Ответов:
    4
    Просмотров:
    526
Статус темы:
Закрыта.

Поделиться этой страницей