MATLAB Answers

how to find out if a number is even or not

3,933 views (last 30 days)
divya r
divya r on 23 Oct 2012
Edited: Matt J on 18 Feb 2020 at 20:15
I know in C language, for any number x using x%2 will calculate the remainder when x is divided by 2, which will help decipher whether its even or not.
How can I do this in matlab?

  1 Comment

Jaimin Motavar
Jaimin Motavar on 5 Jul 2019
you can do it this in matlab by the very simple way by using implicit function rem(a,b) , where a is devided by b.
for example.
r1=rem(4,2)
r=0;
r2=rem(9,2)
r2=1;

Sign in to comment.

Accepted Answer

Walter Roberson
Walter Roberson on 23 Oct 2012
Edited: MathWorks Support Team on 9 Nov 2018
See mod and rem

  1 Comment

Dillen.A
Dillen.A on 5 Feb 2020 at 14:47
A quick example:
A = [-2 -1 0 1 2 3 4 5 6]; % A is your value or matrix
IS_EVEN = ~mod(A,2)
Which is the same as
IS_EVEN = ~bitget(abs(A),1)
And the same as
IS_EVEN = ~rem(A,2)
You can use logical() instead of ~ (isnot) for ODD, should you want booleans. Also bitget() does not work for negative integers, hence abs().
A warning though; ONLY bitget() will throw an error if an element in A is not an integer! the others will output 'odd' for fractions.
Unless you will repeat this many many times, the speed is not relevant. Otherwise, you should vectorize.

Sign in to comment.

More Answers (4)

Jan
Jan on 23 Oct 2012
Care for exceptions:
NaN, Inf, 1e54, int8(-128)
There are some FEX submission for this task, e.g. FEX: parity checker.

  0 Comments

Sign in to comment.


Matt J
Matt J on 23 Oct 2012
if bitget(A,1) %odd
else %even
end

  2 Comments

Matt J
Matt J on 23 Oct 2012
Note that solutions based on REM and MOD have certain non-robustness to large numbers, though I never quite understood why:
>> mod(bitmax+[1:8],2) %all are even
ans =
0 0 0 0 0 0 0 0
Josh Meyer
Josh Meyer on 10 Oct 2018
In more recent versions of MATLAB, bitmax was replaced by flintmax. This is the largest consecutive floating point number. After flintmax, the value of eps is larger than 1 (slowly increasing in powers of 2), so representable numbers larger than flintmax are no longer consecutive.
So, the reason all of those numbers are even is because flintmax is an even number and the spacing between numbers is eps(flintmax) = 2.

Sign in to comment.


Ibn e Adam
Ibn e Adam about 1 hour ago
% function to find even/odd
% n is input number for this function
function output=even_or_odd(n)
if rem(n,2)==0
output=even;
else
output=odd;
end
end

  1 Comment

Matt J
Matt J 25 minutes ago
This is already covered by previous answers...

Sign in to comment.

Sign in to answer this question.