Я предполагаю, что это только для integer
чисел, поскольку понятие нечетных / четных не дает мне значения с плавающей запятой.
Для этих integer
чисел проверка наименьшего значащего бита (LSB)как предложено Rotem - самый простой метод, но есть много других способов сделать это.
Например, вы можете использовать целочисленное деление операция в качестве теста. Это одна из самых основных операций, которая реализована практически на каждой платформе. Результатом целочисленного деления всегда является другое integer
. Например:
>> x = int64( 13 ) ;
>> x / 2
ans =
7
Здесь я приведу значение 13
как int64
, чтобы убедиться, что MATLAB обрабатывает число как integer
вместо double
типа данных. Также здесь результат фактически округляется до бесконечности до следующего интегрального значения. Это конкретная реализация MATLAB, другая платформа может округляться, но для нас это не имеет значения, поскольку единственное поведение, которое мы ищем - это округление, в зависимости от того, как оно идет. Округление позволяет нам определить следующее поведение:
- Если число равно даже : деление его на 2 приведет к точному результату, так что если мы умножим этот результат на 2мы получаем исходное число.
- Если число равно нечетное : деление его на 2 приведет к округленному результату, так что умножение на 2 приведет к получению числа, отличного от исходногоinput.
Теперь у вас есть логика, код довольно прост:
%% sample input
x = int64(42) ;
y = int64(43) ;
%% define the checking function
% uses only multiplication and division operator, no high level function
is_even = @(x) int64(x) == (int64(x)/2)*2 ;
И, конечно, это даст:
>> is_even(x)
ans =
1
>> is_even(y)
ans =
0