Autor Tema: Aporte - Cálculos con muchos Decimales en Arduino  (Leído 180 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado humberto 02

  • PIC10
  • *
  • Mensajes: 40
Aporte - Cálculos con muchos Decimales en Arduino
« en: 07 de Mayo de 2017, 12:26:02 »

Es hora de volver a la escuela: Números Reales

El 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)
Código: [Seleccionar]
#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

Código: [Seleccionar]
#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.zip

Espero 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!

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 5841
Re:Aporte - Cálculos con muchos Decimales en Arduino
« Respuesta #1 en: 07 de Mayo de 2017, 14:34:58 »
Me fije exactamente como es que se maneja, y por dentro lo hace con strings, lo que si toca uno de los temas que en los microcontroladores no usamos, que es la memoria dinamica. De todas formas buena libreria.

Para los que quieren usarla y no de Arduino pueden usar los archivos number.*

Desconectado fandiño

  • PIC10
  • *
  • Mensajes: 12
Re:Aporte - Cálculos con muchos Decimales en Arduino
« Respuesta #2 en: 24 de Junio de 2017, 22:17:03 »
muy bueno, no sabia que eso existía. es útil para nuestros proyectos de electricidad.


 

anything