Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/34: Рейтинг темы: голосов - 34, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 07.11.2014
Сообщений: 7

Условия цикла for, числа double

19.08.2015, 12:04. Показов 6600. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
День добрый. Решал недавно задачку с одного сайта, задачка простая была, но после решения и подглядывания решения от авторов наткнулся на один, по крайней мере для меня, интересный момент в коде. Задачей было пройтись по циклу с шагом в 0.2 от -1.1 до 0.3.
Как сделал я:
C++
1
2
3
4
    for (double x = -1.1; x <= 0.3; x += 0.2)
    {
        ...
    }
Что было в решении:
C++
1
2
3
4
    for (double x = -1.1; x < 0.3; x += 0.2)
    {
        ...
    }
Оба решения выполняет задачу, но почему? 0.3 ведь не должно подходить под условие x < 0.3, может кто-нибудь объяснить, почему оно работает?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.08.2015, 12:04
Ответы с готовыми решениями:

Преобразовать 2 числа int в 1 число float(double) | double int1.int2
Всем привет. Изучая азы C++, столкнулся с такой проблемой. Есть два значения типа int, их необходимо преобразовать в одно значение типа...

Ошибки error C2296: -: недопустимо, левый операнд имеет тип "double (__cdecl *)(double,double,double
Думаю из-за polp #include&lt;iostream&gt; #include&lt;cmath&gt; #include&lt;cstdlib&gt; using namespace std; double polp(double af,double...

Оптимизация условия цикла while
Доброго времени суток, друзья! Я еще совсем новичок в С++. Подскажите плз как оптимизировать следующее условие выхода из цикла while. Уж...

4
21 / 22 / 7
Регистрация: 04.08.2015
Сообщений: 131
19.08.2015, 12:11
Все дело в представлении чисел в компьютере, нельзя дробные числа сравнивать так же, как и целые
0
2393 / 1913 / 763
Регистрация: 27.07.2012
Сообщений: 5,558
19.08.2015, 12:12
Лучший ответ Сообщение было отмечено gif_T как решение

Решение

Цитата Сообщение от gif_T Посмотреть сообщение
Задачей было пройтись по циклу с шагом в 0.2 от -1.1 до 0.3.
Может быть, ключевое слово "до"? Т.е. не включая крайнее значение.

Цитата Сообщение от gif_T Посмотреть сообщение
Как сделал я
Тут есть нюанс. Сравнивать числа double при помощи операторов ==, <= и т.д. нельзя (ну т.е. теоретически-то можно, но на практике - не стоит). Надо сравнивать с какой-то точностью, т.е. x == y сделать в виде (x - y) < precision. В precision задать желаемую точность, например 0.0000001
2
0 / 0 / 0
Регистрация: 07.11.2014
Сообщений: 7
19.08.2015, 12:23  [ТС]
John Prick, спасибо, почитаю еще об этом.
В примере работы программы было включая и -1.1, и 0.3, надо было сразу написать.
0
2393 / 1913 / 763
Регистрация: 27.07.2012
Сообщений: 5,558
19.08.2015, 12:33
Цитата Сообщение от gif_T Посмотреть сообщение
В примере работы программы было включая и -1.1, и 0.3
Тогда решение "от авторов" не верно. Даже для int, к примеру, было бы не верное.

Как-то так:
C++
1
2
3
4
5
6
const int precision = 0.0000001;
 
bool equal(double x, double y) { return (x - y) < precision; }
bool less_or_equal(double x, double y) { return equal(x, y) || (x < y); }
//...
for (double x = -1.1; less_or_equal(x, 0.3); x += 0.2) // ...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.08.2015, 12:33
Помогаю со студенческими работами здесь

Условия цикла в функции
int reverse_number(int number) { int n = 0; while(number) { n = 10*n + number%10; number /= 10; ...

Условия остановки цикла
А как задать условие для: 1) Допустим идет цикл вычислений. Необходимо прервать вычисления при условии, что 3 последних вычислений будут...

Проверка условия окончания цикла for
Здраствуйте. Проблема заключается в следующем. Есть следующий цикл: for( int i=2; !((n%i||d%i)&amp;&amp;!(n%i&amp;&amp;d%i))==0 ; i++){ ...

При выполнении условия не выходит из цикла
При выполнении условия не выходит из цикла а продолжается и выходит за границы #include &lt;iostream&gt; #include &lt;conio.h&gt; ...

Завершение внешнего цикла из внутреннего условия
Подскажите, как в функции set() завершить цикл for при выполнении условия цикла if? Компилятор выдает ошибку и если я правильно понял то...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru