MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn moreOpportunities for recent engineering grads.

Apply Today
Asked by C Zeng on 14 Mar 2013

Hi, by the command of isinteger I can check if it is an integer, however, when defined at first, Matlab assume it is double precision right? So even a=3, isinteger(a) returns 0.

How to solve this problem?

*No products are associated with this question.*

Answer by per isakson on 14 Mar 2013

Edited by per isakson on 15 Mar 2013

Accepted answer

Matlab represent integers in differnt ways:

- int8, int16, etc. see Christians answer
- with a special use of double, which is called
*flint*. See Floating Points

I use this function to test for *flint*

function isf = isflint( m ) % floating double only try bitand( abs( m ), 1 ); isf = true; catch me isf = false; end end

I picked up the idea from a contribution by the "Pedestrian" in the FEX.

(I stripped off comments and error handling.)

Show 2 older comments

Jan Simon on 16 Mar 2013

The problem is to decide, if 1e17 is an integer or not: Because a `double` can store 16 digits only, this number does not contain any information about the fractional part for reasons of the precision. `bitand()` detect this and throw an error, while `1e17==round(1e17)` replies `true`, because cropping the fractional part does not influence value.

Answer by Jan Simon on 16 Mar 2013

Joining the rounding with the checks for overflows:

function isf = isflint(m) isf = (abs(m) <= bitmax && m == floor(m));

Answer by ChristianW on 14 Mar 2013

doc isinteger

isinteger(int8(3))

Show 2 older comments

Jan Simon on 16 Mar 2013

@C Zeng: `@(x) x==round(x)` is an anonymous function. You find an exhaustive description ion the documentation.

## 0 Comments