Как часть программы, которую я пишу для задания, мне нужно сравнить два числа. По сути, программа вычисляет эксцентриситет эллипса, учитывая его две оси, и ему приходится сравнивать значение вычисленного эксцентриситета с (заданной) эксцентриситетом орбиты Луны вокруг Земли и земной орбитой вокруг Солнца. Если вычисленный эксцентриситет больше заданного эксцентриситета, то это должно быть представлено значением 1
, в противном случае - значением 0
. Все эти значения являются плавающей точкой, в частности, long double
.Сравнение двух чисел без операторов сравнения
Ограничения присвоения не позволяют мне использовать операторы сравнения (например, >
) или любую логику (!x
или if-else
). Тем не менее, мне разрешено использовать функции pow
и sqrt
из библиотеки math.h
. Мне также разрешено использовать арифметические операции, а также операцию по модулю.
Я знаю, что я могу воспользоваться нацело усечь десятичной, если знаменатель больше числителя, т.е.:
int x = eccentricity/MOON_ORBIT_ECCENTRICITY;
... будет 0
если MOON_ORBIT_ECCENTRICITY
больше чем eccentricity
. Однако, если это отношение инвертировано, то значение x
может быть любым ненулевым целым числом. В таком случае желаемый результат равен 1
.
Первый и наиболее интуитивно (и наивным) раствор:
int y = (x/x);
Это будет возвращать 1
, если x
не равен нулю. Однако, если x
- 0
, то моя программа вылетает из-за деления на ноль. Фактически, я продолжаю сталкиваться с проблемой деления на ноль. Это происходит также в случае:
int y = (x + 1) % x;
Кто-нибудь есть идея, как решить эту проблему? Это кажется так разочаровывающе легко.
Вы проверили функции потолка и пола? –
Если вам не разрешено использовать контрольные выражения типа 'if', как вы должны использовать результат сравнения? – harper
Можете ли вы использовать побитовые операции? –