INF1018 - Software Básico - 2011.2

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 float2int (float f) {
  unsigned int i;
  U u;  
  u.f = f; i = u.i;
  ... /* seu codigo */
}
float int2float (int i) {
  U u;  
  ... /* seu codigo */
  u.i = makefloat(...);
  return u.f;
}
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))