Pregunta básica de la declaración de variables del tipo float

Hola amigos,
Sé que lo que voy a preguntar es quizás muy básico pero no acabo de comprender de forma profunda el sentido de la variable “float”. Me explico: por un lado, si vamos a la web de Arduino y buscamos la definición de float, traducido dice lo siguiente:

“Los números de punto flotante no son exactos y pueden producir resultados extraños si se comparan. Por ejemplo 6.0 / 3.0 puede no ser igual 2.0. En su lugar debe comprobar que el valor absoluto de la diferencia entre los números es menor que un número pequeño.”

No acabo de comprender lo que indica. He hecho pruebas con Arduino y siempre me ha dado 2. ¿Cuándo da resultados raros? Por otro lado, el valor absoluto de la diferencia entre 6 y 3 es 2. Entonces qué significa esto de: “es menor que un número pequeño”? ¿Qué número?

Por otro lado, ¿qué diferencia hay entre el double y el float? He estado mirando en varias webs y parece que al final son lo mismo…

¡Muchísimas gracias!

josepramon: Sé que lo que voy a preguntar es quizás muy básico pero no acabo de comprender de forma profunda el sentido de la variable "float".

Hay dos reglas importantes: a) Los float soportan números entre -3.4E38 a +3.4E38 b) Los float ocupan 32 bits, el primero es el signo (1=negativo), los 8 siguientes son la parte entera y los últimos 23 son la parte decimal.

Ahora piensa que con 8 bits el numero máximo que puedo almacenar es 255 (2^8), entonces como podría guardar alli por ejemplo 1234.56789 ?

La respuesta es usando exponenciales por lo que Float solo tiene 6-7 dígitos de representación y es alli donde empieza con los redondeos.

josepramon: Por otro lado, ¿qué diferencia hay entre el double y el float? He estado mirando en varias webs y parece que al final son lo mismo...

En Arduinos UNO (AVR en general), double ocupa 4 bytes (32 bits); por lo que es igual a float y no hay ganancia en precisión. En Arduino MEGA double es de 64 bits.