Autor Tema: Rutina en C - Decimal a Punto Flotante IEEE 754  (Leído 2726 veces)

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

Desconectado IngRandall

  • PIC18
  • ****
  • Mensajes: 383
Rutina en C - Decimal a Punto Flotante IEEE 754
« en: 02 de Febrero de 2012, 12:17:50 »
Hola amigos del foro, hace un tiempo estuve trabajando con el formato Punto Flotante IEEE 754, un amigo me paso la rutina que convertía de Decimal a Punto Flotante, me funciono perfectamente y hasta el momento no había tenido quejas de ella, la rutina es la siguiente:

void Dec_Float()// Conversion de Decimal a Flotante.
{      
    float Vx;

    Vx=(valor);
    Vx=Vx/1000;

    ptr= &Vx;
    vector_decfloat[3]= *ptr;
    vector_decfloat[2]= ((*ptr)&0xFF00)/0x100;
    ptr=&Vx; ptr++;
    vector_decfloat[1]= *ptr;
    vector_decfloat[0]= ((*ptr)&0xFF00)/0x100;
}
Donde:
long long valor;
int *ptr;
unsigned char vector_decfloat[4];

Pero, ahora mismo estoy haciendo un programa en el cual debo entregar los datos en ASCII y en Punto Flotante IEEE 754, utilice el mismo metodo pero no me ha funcionado, me da datos erroneos y como si fueran aleatorios.

Quisiera saber si tengo algun error o alguna apreciacion que me puedan hacer de este codigo o si alguien tiene otro que le haya funcionado para que me haga el favor de pasarlo ya que me estoy volviendo loco  :D :D :D... es lo unico que falta para terminar mi proyecto.

Muchas gracias.

Desconectado IngRandall

  • PIC18
  • ****
  • Mensajes: 383
Re: Rutina en C - Decimal a Punto Flotante IEEE 754
« Respuesta #1 en: 02 de Febrero de 2012, 13:33:10 »
Bueno, me puse a hacer el Debug y hasta que mire como podría funcionar, y lo encontré, el código es el siguiente:

void Dec_Float(unsigned int valor){      // Conversion de Decimal a Flotante.
    vector_decfloat[0]=vector_decfloat[1]=vector_decfloat[2]=vector_decfloat[3]=vector_decfloat[4]=0;

    Vx=(valor);
    Vx=Vx/1000;
    ptr= &Vx;
    vector_decfloat[4]= *ptr;

   vector_decfloat[3]=vector_decfloat[4]&0x000000FF;

   vector_decfloat[4]=vector_decfloat[4]>>8;

   vector_decfloat[2]=vector_decfloat[4]&0x0000FF;

   vector_decfloat[4]=vector_decfloat[4]>>8;

   vector_decfloat[1]=vector_decfloat[4]&0x00FF;

   vector_decfloat[4]=vector_decfloat[4]>>8;

   vector_decfloat[0]=vector_decfloat[4]&0xFF;
}

Donde:

char buffer_respuesta[300];
char ASCII[]="0123456789ABCDEF";
unsigned int vector_decfloat[5];
int *ptr;
float Vx;

Así que ya funciona, si alguien la necesita las puede probar a ver que tal le funciona.


 

anything