# Data Types in Arduino

Contributors: b_e_n

## Testing Data Types (Multiplication/Division)

Now let’s look at what happens with ‘harder’ math - multiplication and division.

Here are some screen grabs for multiplication:

Check out the elapsed times: 4µs for `byte`

, 8 for `int`

or `long`

, and 12 for `float`

- longer for larger data types, and also what we expect to see in terms of ‘harder’ math taking longer. Multiplication is still hardware supported, though - there is a native multiply instruction in the processor which makes multiply operations relatively easy. But what about division?

Oh, my. `byte`

division isn’t too bad at 16µs, but 48 for `long`

? Ouch. The problem here is that division does NOT have a native instruction in the Atmega instruction set, so the compiler has to do some back flips to create one. So, final lesson: not all mathematical operations are created equal. Divide takes a lot longer than multiply or add (or subtract, but that’s really just add with a minus sign), and something like finding a square root or a sine would take even longer. So long, in fact, that it’s often easier just to maintain a list of values for square roots or sine/cosine/tangent and look up the value that you want than it is to calculate it.