Operaciones con punto flotante

#1
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.
 
#2
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.
 
#3
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?
 
#4
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?
 
#5
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.
 
#6
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.
 

Temas similares

Arriba