INF1612 - Software Básico

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 funciona, pois o C irá converter o formato.

#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))