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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2014, 11:30   #1
halcyon
crafter
Форумчанин
 
Аватар для halcyon
 
Регистрация: 03.09.2011
Сообщений: 127
По умолчанию Почему 31.4 != ( 3.14 * 10.0 )

Долго не мог понять почему:
Код:
std::list<double> li(10);
int c = 0;
for( auto& e: li )
{
     e = 3.14 * ++c;
}
auto iter = find( li.begin(), li.end(), 31.4 );
    if( iter != li.end() ) cout << "found: " << *iter << endl;
    else cout << "nothing found!\n";
в iter устанавливается li.end();
Оказывается 3.14*10.0 != 31.4. Почему?
halcyon вне форума Ответить с цитированием
Старый 05.06.2014, 11:43   #2
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Скорее всего, здесь издержки машинного представления вещественных чисел.
Данные числа, в отличие от целых, "в лоб" лучше не сравнивать.
Даже если число с конечным числом знаков после запятой , то лучше округлить до нужного числа знаков.
То есть, попробуйте округлит результат вычисления 3,14*10 до 1 знака после запятой.
Streletz вне форума Ответить с цитированием
Старый 05.06.2014, 12:25   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

проблема в машинном представлении вещественных чисел.
Ознакомьтесь с темой

Вещественные числа НЕЛЬЗЯ сравнивать.
Почитайте по этой ссылке статьи...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
А почему бы? ZuBy О форуме и сайтах клуба 6 16.09.2013 19:00
Почему? С++ xitrec1zaraza Помощь студентам 5 15.03.2011 20:02
Почему 0? Nikita++ Помощь студентам 4 20.10.2010 19:39
Почему? logok Общие вопросы C/C++ 2 12.04.2010 21:59
Почему? Sota О форуме и сайтах клуба 4 26.07.2007 16:26