Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

Нужно написать небольшую программу на C++

Нужно написать программу, которая считает и выводит значение 1/x. Значение x целое число, которое начинается с 1 и оканчивается значением, при котором 1/x становится меньше значения 0.0023. После использовании последнего x вывести его значение на экран. Использовать оператор break нельзя. Использовать цикл while.
Помогите пожалуйста.
Вот код, но он получается бесконечным, почему и правильна ли логика?
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
float X = 1;
float Y = 1;
while (Y != 0.0023) {
Y = 1 / X;
cout << Y << " " << X << endl;
X++;
}
}
Написание кодаC+++3
TrevarCat Yo
  ·   · 388
Программист (по должности — аналитик-разработчик...  · 10 окт 2022
«число, которое начинается с 1 и оканчивается значением, при котором 1/x становится меньше значения 0.0023» — если тут подразумевается так же «x увеличивается на 1 с каждой итерацией» — логика верная, за исключением того, что по ТЗ надо остановиться, когда, 1/x становится МЕНЬШЕ значения 0.0023, а в коде остановка происходит, когда, 1/x становится РАВНЫМ значения 0.0023. Если поменять Y != 0.0023 на Y >= 0.0023 — работает, как запланировано.
Причин текущего поведения может быть две.
Первая: выражение 1/x при целом x никогда не принимает значение 0.0023. То есть, условие выхода из цикла не выполняется, и это нормально.
Вторая: равенство не выполняется из-за погрешности чисел с плавающей точкой. Например, 1/3 + 1/3 + 1/3 = 0.333 + 0.333 + 0.333 = 0.999 != 1. Это надо учитывать всегда при проверке чисел с плавающей запятой на точное равенство.
Спасибо большое за помощь, теперь это стало ещё больше понятней.