TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: RodrigoAndres en 29 de Julio de 2015, 22:48:16
-
bueenas a todos me gustara saber si ahy una forma de detectar si ubo un desbordamiento despues de haser una operasion matematica flotante en CCS, asi:
float a = 0;
float b = 0;
float resultado = 0;
void main()
{
a = 1000000; // que la variable a sea igual a un millon
b = 1000000; // que la variable b sea igual a un millon
resultado = a*b; // la variable resultado seria igual a mil millones, lo que no se puede representar en flotante del ccs y se desbordaria
}
eso daria un resultado totalmente eqivocado, lo ke quiero saber es como hago para detectar ke se desbordo y ke el resultado ke me dio esta malo.
SALUDOS.
-
Mmmm... es muy dificil que desbordes un flotante:
El maximo es de : 3.4028234 × 10^38 ( 7f 7f ff ff )
en single precision, aunque por ahi pierdas algunos bits de informacion.
Si quisieras detectar el desbordamiento o haCerlo de una operaCion matematica en punto flotante, deberias modificar ya cosas de CCS, si CCS NO posee una funcion, entonces vas a tener que crear la tuya. Pero para eso te vas a tener que romper la cabeza y hacerlo en ASM para que sea eficiente para el micro.
Es lo unico que se me ocurre. Distinto es un punto fijo, pero los motores de punto fijo normalmente traen ya para que se haga un truncado o redondeado al existir un overflow
Igual en flotante (IEEE 754) hay algunas excepciones que se consideran infinito+ (+ y -) e infonito- (+ y -), ademas de un NaN.
-
gracias por tu ayuda.
lo que pasa es que el float del CCS no sigue el estandar IEEE, por lo que el maximo valor que llega es a mas o menos 6 millones, positivo y negativo.
yo tambien lo vi en el archivo de ayuda no se porque pusieron que 10^38 eso es mentira
-
De un post de CCS:
CCS C uses the Microchip floating point format,
De un AN de microchip, se puede ver que lo unico que cambia es el lugar del signo, pero poseen la misma cantidad de bits en lo demas
http://ww1.microchip.com/downloads/en/AppNotes/00575.pdf
MAX: 6.80564693E+38
MIN: 1.17549435E-38
yo tambien lo vi en el archivo de ayuda no se porque pusieron que 10^38 eso es mentira
No se en que te basas para decir eso.. la matematica es clara, tenes bits de exponentes y bits fraccionarios + un bit de signo.