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

Вещественные числа и округление - C++

Восстановить пароль Регистрация
 
gund
18 / 18 / 0
Регистрация: 05.05.2013
Сообщений: 88
12.10.2013, 23:10     Вещественные числа и округление #1
Или я туплю, или долго сижу, но вот никак не могу решить такую задачу: есть диапазон (напр. от 88 до 88.5), нужно в цикле обойти этот диапазон с шагом 0.1. Написал вот так:
C++
1
2
3
4
for (double i = 88; i < 88.5; i+=0.1)
        {
            // Тут нужно делать проверки связанные с i, то есть очень важно точность (одна цифра после запятой) при каждой итерации
}
И при исполнении кода неправильно итерируется i. В дебаге я посмотрел, оно вот такое:
88.000000000000000
88.099999999999994
88.199999999999989
88.299999999999983
88.399999999999977
88.499999999999972
Нужно либо заставить правильно (точно) складываться, либо округлять до 1 цифры после запятой, иначе просто не работает сравнение в цикле.
Спасибо.

Пытался сделать так:
C++
1
i = int(i*10)/10.0;
Без толку.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2013, 23:10     Вещественные числа и округление
Посмотрите здесь:

C++ вещественные числа
C++ округление числа до десятых
C++ Округление мелкого числа до 0
C++ Округление дробового числа
C++ Округление числа
C++ Погрешность числа (округление)
Вещественные числа C++
Округление числа C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Гром
 Аватар для Гром
199 / 118 / 10
Регистрация: 20.03.2009
Сообщений: 1,075
Записей в блоге: 15
12.10.2013, 23:32     Вещественные числа и округление #2
Точные значения вы не сможете получить из-за особенностей представления чисел в память компьютера (они там хранятся как степени двойки, поэтому точно можно получить только числа вида 1*0.5 + 0*0.25 + 1*0.125 + ...)
Для сравнения напишите как-нибудь так:
C++
1
2
3
double epsilon = 0.001;
for (double i = 88; fabs(i - 88.5) < epsilon; i += 0.1)
 //
Yandex
Объявления
12.10.2013, 23:32     Вещественные числа и округление
Ответ Создать тему
Опции темы

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