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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
gund
18 / 18 / 0
Регистрация: 05.05.2013
Сообщений: 88
#1

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

12.10.2013, 23:10. Просмотров 522. Ответов 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++ вещественные числа в разные СС
C++ Округление мелкого числа до 0
C++ Округление числа
C++ Даны вещественные числа х, у
C++ Даны вещественные числа А > 1 и В
C++ Даны вещественные числа x, y
Даны вещественные числа A1, A2, A3 C++
Вещественные числа C++
Округление числа C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Гром
207 / 126 / 11
Регистрация: 20.03.2009
Сообщений: 1,094
Записей в блоге: 16
Завершенные тесты: 1
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     Вещественные числа и округление
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru