Autor Tema: desbordamiento en CCS  (Leído 1752 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado RodrigoAndres

  • PIC16
  • ***
  • Mensajes: 171
desbordamiento en CCS
« 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.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: desbordamiento en CCS
« Respuesta #1 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.

Desconectado RodrigoAndres

  • PIC16
  • ***
  • Mensajes: 171
Re: desbordamiento en CCS
« Respuesta #2 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

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: desbordamiento en CCS
« Respuesta #3 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.