TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: RodrigoAndres en 29 de Julio de 2015, 22:48:16

Título: desbordamiento en CCS
Publicado 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:

Código: [Seleccionar]

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.
Título: Re: desbordamiento en CCS
Publicado por: KILLERJC en 30 de Julio de 2015, 03:11:59
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.
Título: Re: desbordamiento en CCS
Publicado por: RodrigoAndres en 02 de Agosto de 2015, 04:46:19
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
Título: Re: desbordamiento en CCS
Publicado por: KILLERJC en 02 de Agosto de 2015, 11:18:52
De un post de CCS:
Citar
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

Citar
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.