# Data Types: does double and float exactly the same in Arduino?

I read on the reference pages that double is the same as float (precision).
My question is, can I move all my doubles to float in my code and don't worry about strange results?

What do you mean by "strange results"?

I think you may still get strange results, but those results should not be different that when you were using doubles.

long = double = float in terms of size, all are 32-bit.
other than that, aren't the types reprenting different things?

unsigned long = 0 to 0xFFFF
(signed) long = (-)0xFFFF to 0 to (+)0x7FFF
float = 00.xx xxxx xxxxx xxxx to FF.xx xxxx xxxx xxxx ?? signed/unsigned?
Have not used float in anything yet.

To find out for yourself, use sizeof() on the various types and print the result.

{ cough } unsigned long 0xffffffff

Have not used float in anything yet.

You're discriminating against slow code!

yeah, I guess 0xFFFF is only 16 bits. I Said 32 tho, fingers not keeping up with the brain

Slow code - not used here! Direct port manipulation, SPI transfers, no function calls and minimal interrupts - high speed all they way!

I noted that in some functions in some libraries have support for float and not for double and also for double and not for float.
That's because they are type checking.
However, it seems that the representation of float and double in the Arduino is exactly the same.
So... I'm wondering, for the sake of compatibility, to only use float in my code.
However I'm not sure if this is a safe thing to do.
In the reference page we have this:

"Floats have only 6-7 decimal digits of precision. That means the total number of digits, not the number to the right of the decimal point. Unlike other platforms, where you can get more precision by using a double (e.g. up to 15 digits), on the Arduino, double is the same size as float."

It seems that only on the DUE that doubles have twice the precision.