INF1018 - Software Básico - 2011.1

Aulas de Laboratório

Representação de Números com Ponto Flutuante

O objetivo deste laboratório é escrever as funções abaixo, em C ou assembler, sem usar operações de ponto flutuante. As funções devem operar diretamente sobre a representação binária dos números.

Observações:

typedef union { 
  float f;
  unsigned int i;
 } U;  /* fora da funcao */
...
int funcao_que_voce_vai_escrever (float f) {
  unsigned int i;
  U u;  
  u.f = f; i = u.i;
  ... /* seu codigo */
}
Uma conversão direta, como i = (unsigned int)f, não vale, pois o C irá converter o formato, e a proposta do laboratório é você fazer a conversão...

#define getsig(f)        ((f)>>31 & 1)
#define getexp(f)        ((f)>>23 & 0xff)
#define getmant(f)       ((f) & 0x7fffff)
#define makefloat(s,e,m) ((s & 1)<<31 | (((e) & 0xff) << 23) | ((m) & 0x7fffff))