Форум программистов, компьютерный форум CyberForum.ru

Не работает элементарнейший код - C++

Восстановить пароль Регистрация
 
Fokysnik
Сообщений: n/a
05.06.2012, 01:10     Не работает элементарнейший код #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
int _tmain()
{
    vector<double> numbers;
    double number = 0;
    const double abs_mistake = 0.1;
    double num_mistake = 0;
 
    cout << "Input 2 numbers and press '|': \n"; 
    while(cin >> number)
        numbers.push_back(number);
 
    sort(numbers.begin(),numbers.end());
 
        num_mistake=abs(numbers[1]-numbers[0]);
    //cout << num_mistake << " " << abs_mistake << endl;
 
    if(num_mistake==abs_mistake)// когда я ввожу два числа к примеру 23 и 23.1 то при выходит что переменная  num_mistake==0.1 и условие должно срабатывать, а оно не срабатывает 
    {
        cout << numbers[0] << " ~~ " << numbers[1] << endl;
        cout << "Two numbers are almost equal!!!\n";
    }
    system("pause");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2012, 01:10     Не работает элементарнейший код
Посмотрите здесь:

Код не работает C++
C++ Код не работает.
C++ Не работает код
C++ Код не работает в VC++ 6.0 но работает в MSVC++ 2010
std::string код работает в VS 6.0, но не работает в VS2012 (error C4996) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soft.creator
 Аватар для soft.creator
103 / 103 / 4
Регистрация: 17.10.2010
Сообщений: 283
05.06.2012, 10:57     Не работает элементарнейший код #2
C++
1
if(num_mistake==abs_mistake)
Так никто не делает. У Вас num_mistake может быть равен 0.099999999, и это число не равно 0.1. Подобные условия нужно записывать как
C++
1
if (fabs(num_mistake - abs_mistake) < 1e-6)
Вместо 1e-6, конечно, может быть другое маленькое число, оно зависит от точности, с которой хочется сравнивать числа
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
05.06.2012, 11:07     Не работает элементарнейший код #3
Цитата Сообщение от Fokysnik Посмотреть сообщение
if(num_mistake==abs_mistake)
double на точное равенство сранивать не надёжно из-за ошибок округления.
C++
1
2
3
4
5
6
7
8
double x, y, d, e;
d=0.1;
x=1.1;
y=1.2;
e=y-x;
if (e==d) //  поведение этой альтернативы слабо предсказуемо.
{
}
Добавлено через 1 минуту
То же относится и к float, и к long double, и к extended, и вообще ко всем вещественным типам во всех языках.
Fokysnik
Сообщений: n/a
05.06.2012, 17:12     Не работает элементарнейший код #4
Спасибо!!! Я новичок потому я не знал этого!!!!!!!
Yandex
Объявления
05.06.2012, 17:12     Не работает элементарнейший код
Ответ Создать тему
Опции темы

Текущее время: 01:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru