Es hora de volver a la escuela: Números RealesEl conjunto de los números reales pertenece a la recta numérica que comprende a los números racionales y a los números irracionales. Esto quiere decir que incluyen a todos los números positivos y negativos, el símbolo cero, y a los números que no pueden ser expresados mediante fracciones de dos enteros que tengan como denominador a números no nulos (excluye al denominador cero).
¿
Intentaste trabajar con un GPS, Sensor de Temperatura, Balanza, etc. Con ARDUINO?
Dependiendo del trabajo que desarrolles con Arduino verás que es casi imposible operar con decimales “confiables”.
Para ello haremos este ejemplo
Suma de valores
33,5672311112 + 12,5555517456
Si comenzamos a trabajar con el Visor Serial verás que los decimales cambian y por ende el resultado
no será el correcto.
Sketch normal (
con resultados incorrectos)
#define test_type float
#include <SoftwareSerial.h>
test_type AA = 23.1213333891;
test_type BB = 12.2311211112;
test_type CC = AA + BB;
test_type DD = CC * -1;
void setup(){
Serial.begin(9600);
Serial.print("AA= ");
Serial.println(AA,10);
Serial.print("BB= ");
Serial.println(BB, DEC);
Serial.println("");
Serial.print("CC con DEC= ");
Serial.println(CC, DEC);
Serial.print("CC con ,10= ");
Serial.println(CC,10);
Serial.print("DD es CC*-1= ");
Serial.println(DD, 10);
}
void loop(){}
¿Cómo resolvemos este problema?
Afortunadamente contamos con una librería que lo resuelve
#include <BigNumber.h>
#include <SoftwareSerial.h>
void setup(){
Serial.begin(9600);
BigNumber::begin(10);
BigNumber A = ("23.1213333891");
BigNumber B = ("12.2311211112");
BigNumber C ("-1");
BigNumber D ("");
D = (A + B) * C;
Serial.print("A ");
Serial.println(A);
Serial.print("B ");
Serial.println(B);
Serial.print("C ");
Serial.println(C);
Serial.print("D ");
Serial.println(D);
}
void loop(){}
Aquí podrás levantar la librería para trabajar con los decimales:http://www.gammon.com.au/Arduino/BigNumber.zipEspero que tengas muy presente este tema, podrías necesitarlo algún día.
Desde
Gualeguaychú Entre Ríos te envío un Cordial Saludo y como siempre ... Te deseo lo mejor!