uControl
Mayo 30, 2017, 04:26:22 *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?

Ingresar con nombre de usuario, contraseña y duración de la sesión
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1]   Ir Abajo
  Imprimir  
Autor Tema: Aporte - Cálculos con muchos Decimales en Arduino  (Leído 190 veces)
0 Usuarios y 1 Visitante están viendo este tema.
Titohc
PIC12F
**
Desconectado Desconectado

Sexo: Masculino
Mensajes: 257



« : Mayo 07, 2017, 11:47:10 »


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:
#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:
#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!
« Última modificación: Mayo 07, 2017, 11:49:13 por Titohc » En línea

Que el conocimiento jamás tenga un dueño y siempre exista la libertad de nuestra imaginación a la hora de crear.
(Uno para todos y todos para uno)
HJ
Moderador
dsPIC
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5673



« Respuesta #1 : Mayo 09, 2017, 01:21:29 »

En algún momento voy ha tener que hacer algo con Arduino...

Gracias amigo por compartir tus experiencias con el foro.

Saludos
HJ
En línea

"si te lo dicen se te olvida, si lo lees lo aprendes; pero si lo haces realmente lo entiendes"
"Cuando llegue la inspiración, que me encuentre trabajando" [Pablo Picasso]
Titohc
PIC12F
**
Desconectado Desconectado

Sexo: Masculino
Mensajes: 257



« Respuesta #2 : Mayo 11, 2017, 05:56:41 »

Arduino es simplicidad, vagancia, y un gastadero de plata jajaja pero es hermoso para lo que no somos del palo (como siempre digo cuando me defino en la Electrónica).

compartir tus experiencias con el foro.

Cada vez que entro en este foro en particular, recuerdo que no sabía ni lo que era un Microcontrolador. Y Uds. me enseñarón TODO con mucha paciencia.

El compartir mis pocas experiencias; no es otra cosa que hacer lo que Uds. hicieron y hacen a diario con todos nosotros.

Muchas Gracias a Uds. Un Abrazo.



En línea

Que el conocimiento jamás tenga un dueño y siempre exista la libertad de nuestra imaginación a la hora de crear.
(Uno para todos y todos para uno)
Leon Pic
Moderador
dsPIC
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5695


Cumulonimbus


WWW
« Respuesta #3 : Mayo 11, 2017, 07:13:46 »

No sabía de ese problema en Arduino.
Y tal como decís, hay que tenerlo en cuenta.
En línea

Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.
HJ
Moderador
dsPIC
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5673



« Respuesta #4 : Mayo 11, 2017, 08:58:28 »

Arduino es simplicidad, vagancia, y un gastadero de plata jajaja
jajajaja
En línea

"si te lo dicen se te olvida, si lo lees lo aprendes; pero si lo haces realmente lo entiendes"
"Cuando llegue la inspiración, que me encuentre trabajando" [Pablo Picasso]
Páginas: [1]   Ir Arriba
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2011, Simple Machines
SMFAds for Free Forums
XHTML 1.0 válido! CSS válido!
Página creada en 0.036 segundos con 25 consultas. (Pretty URLs adds 0.005s, 2q)
loggkey