Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

08/03/2012 #1

Avatar de Ajna

Operaciones con punto flotante
Hola que tal, espero puedan ayudarme.

El problema es que quiero realizar operaciones en punto flotante en un pequeño avr de 2KB de memoria, el problema es que si lo hago con C pues casi se me termina la memoria, entonces en una ocacion lei en internet que microchip tiene una tablas con las que se pueden hacer operaciones en punto flotante y ocupan mucho menos espacio que si las hicieras en C, el problema es que no doy con ellas, si alguien las tiene y puede explicarme como usarlas le estaria muy agradecido.
08/03/2012 #2

Avatar de Eduardo

Tablas para operaciones en punto flotante? Que yo sepa no hay.
Lo que se puede implementar por tabla son multiplicaciones y divisiones pero restringidas a ~8bits o menos porque si no, ocuparía demasiada memoria.

La necesidad de punto flotante depende de cuáles son realmente las operaciones a realizar y el rango numérico de los valores intermedios. En la mayoría de las aplicaciones con microcontroladores no es necesario, basta usar punto fijo y sentido común en el orden de las operaciones.
09/03/2012 #3

Avatar de Ajna

Bueno voy a tratar de aplicar mas el sentido comun a ver si logra dar, la cuestion es que queria escalar un numero de una funcion lineal a modo de ejemplo 12.4 debe ser 53.5 entonces tengo que multiplacar 12.4*4.2983 ¿eso como se hace?
09/03/2012 #4

Avatar de chclau

Una pregunta es cuánta precisión querés, otra pregunta es el rango de la función, y por último, verificar lo que te dijeron de punto fijo. Por ejemplo si trabajo con un decimal de precisión y punto fijo, los números 12.4 y 4.3 pasan a ser 124 y 43, después de la multiplicación solo debo recordar correr dos puntos la coma. Se entiende la idea?
09/03/2012 #5

Avatar de Ajna

Andale se entiende la idea, despues de todo no importa como se vea dentro el dato si no como lo ve el usuario, jejejeje tienes razon, voy hacer eso aunque pierda un poco de precision, muchas gracias chclau y Eduardo.
09/03/2012 #6

Avatar de Eduardo

Ajna dijo: Ver Mensaje
Bueno voy a tratar de aplicar mas el sentido comun a ver si logra dar, la cuestion es que queria escalar un numero de una funcion lineal a modo de ejemplo 12.4 debe ser 53.5 entonces tengo que multiplacar 12.4*4.2983 ¿eso como se hace?
En punto fijo se trabaja en realidad con enteros y solo en el momento de mostrar el número se hace la conversión.

Vos como ejemplo hablás de multiplicar por 4.2983, empeamos mal porque 53.5/12.4 = 4.314516129

Si esa fuera una constante que no se va a modificar nunca, escribís en el programa:
S = (X * 535)/124
Como primero se hace X*535 , hay dimensionar las variables de manera que no haya overflow.

Si en cambio se hace una calibración por soft, entonces la operación podría ser:
S = (X*cal)/1000
donde cal es una variable que incrementás o decrementás que de entrada valdría 43145.

También las constantes se pueden escribir como K/256 o cualquier otra potencia de 2, con la ventaja que no hay que hacer ninguna division tradicional sino desplazar a la derecha o simplemente descartar un byte.


Pero ojo, hay que aplicar el sentido común para la elección de las constantes y el escalado de las variables, porque si se hace a lo pavote podés tener errores groseros por redondeo o un código inútilmente más largo (importante si estás con la memoria justa) y más lento, que en ciertos casos es importante.
10/03/2012 #7

Avatar de Ajna

Eso eso eso dice el chavo del ocho, sale pues gracias por tu ayuda, mañana me pongo a jugar con los numeros.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.