Для развлечения предположим, что мы хотим сравнить два числа формата double
, используя язык c, и мы можем использовать только математические уравнения, которые используют арифметические операторы +, -, *, /, %
, fabs()
и pow()
для проверки равенства (==
), меньше (<
), и больше (>
). Подобно реальным реляционным операторам ==, <, and >
, код, который мы пишем, должен возвращать True (1
) или False (0
) для каждого из различных типов проверок.
Например, без использования каких-либо других операторов, кроме +, -, *, /, %
, fabs()
и pow()
, если мы определяем, что две переменные a
и b
равны, мы должны вернуть True или 1, в противном случае вернуть False или 0. Это лучше возвращать целые числа 0 и 1 вместо логических значений True и False. Чтобы усложнить ситуацию, мы не можем использовать настоящие реляционные операторы, логические операторы, побитовые операторы или любые другие операторы. Кроме того, мы не можем использовать операторы переключения или условные операторы. Как это сделать?
Я знаю, как найти меньшее значение x и y, то есть x < y
можно вычислить как ((x + y) + fabs(x-y))/2
. Далее, чтобы найти x > y
, это ((x + y) - fabs(x-y))/2
. Однако эти уравнения возвращают значение x или y в зависимости от уравнения сравнения, и мне нужно, чтобы они возвращали 0 или 1. Точно так же мне нужно некоторое уравнение кода, которое возвращает 0 или 1, если x и y равны (==
) каждому другое и должно делать это, используя только +, -, *, /, %
, fabs()
и pow()
.
abs()
? - person Barmar   schedule 04.02.2019abs( )
. - person Chris Heady   schedule 04.02.20190/0
недействителен. - person Barmar   schedule 04.02.2019(time1==time2)*2 + (time1>time2)*2 + (time1<time2)*1
и просто добавить новые уравнения, которые я создаю для ==, › и ‹. - person Chris Heady   schedule 04.02.2019!
)? Если можно,!(a-b)
эквивалентноa==b
. - person pmg   schedule 04.02.2019+, -, *, /, and %
. - person Chris Heady   schedule 04.02.2019double
?unsigned
?int
? Больше, чем0
? Между3.14
и3.15
? - person pmg   schedule 04.02.2019double
. - person Chris Heady   schedule 04.02.2019%
сdouble
... просто говорю :) - person pmg   schedule 04.02.2019^
,|
,!
и&
? - person Bob Jarvis - Reinstate Monica   schedule 04.02.2019^
,|
,!
и&
. - person Chris Heady   schedule 04.02.2019pow
разрешено, вы можете проверить равенство сpow(0.0, fabs(x - y))
, предполагая соглашениеpow(0.0, 0.0) == 1
. Затемx > y
можно протестировать сx == max(x, y)
. - person nwellnhof   schedule 04.02.2019pow( )
разрешено. - person Chris Heady   schedule 04.02.2019