ISODD returns TRUE for members (N) of a numeric array, which
- are within the range of ±bitmax
- are integers such that N == fix(N)
- are integers not evenly divisible by 2
Unlike the typical computational approach using REM/MOD,
ISODD produces a not-valid flag for numbers, which are
1) not an integer
2) larger than the maximum possible double precision
integer representation (±bitmax)
and does never return their parity as being odd
REM/MOD, on the other hand, do not complain if an input
is not a valid candidate for being even or odd at all
and, therefore, are NOT reliable parity checkers
> help isodd
for usage and a brief example for this small utility
us (2020). isodd: a pedestrian parity checker (https://www.mathworks.com/matlabcentral/fileexchange/24278-isodd-a-pedestrian-parity-checker), MATLAB Central File Exchange. Retrieved .
Another thing that confuses me:
1 0 1 0 1
1 0 1 0 1
Shouldn't "b" be all ones in this case?
I found a bug:
because abs() will round the result to fit in int8, so abs(x)=127. Same for all "weird numbers" in two complement form intN(-2^(N-1)).
I uploaded a similar function, but with only one input and one output. An error is raised if input is wrong. It depends on the application what is most useful i guess. (My function also had a few bugs first, but I hope it is sorted out now. The updated version should appear soon.)
Finally, a standard file which can be referenced for the perennial NG question! Well done. Thanks Urs.
change in the help section; version tag 14-Aug-2009 20:35:23
any integer input now is typecast to double before testing; version tag 13-Aug-2009 23:18:39
user request: ND arrays now return the results encapsulated in cells; version tag 29-May-2009 21:36:47
help/example section reorganized; version tag 29-May-2009 15:03:56
changed the output TFODD to mark valid odd integers only; thus, the syntax vec(tfodd&tferr) now is simply vec(tfodd) for odd and vec(~tfodd&tferr) for even integers; version tag 28-May-2009 22:43:42
an annoying typo was corrected