INF1018 - Software Básico

Aulas de Laboratório

Representação de Números com Ponto Flutuante

O objetivo deste laboratório é escrever uma função int2float, em C ou assembly, para converter um número no formato int para o formato float. Essa função deve fazer a conversão sem usar operações de ponto flutuante, isto é, deve operar diretamente sobre a representação binária dos números.

O protótipo da função a ser implementada é:

Observações:

typedef union { 
  float f;
  unsigned int i;
 } U;  /* fora da funcao */
...
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 makefloat(s,e,m) ((s & 1)<<31 | (((e) & 0xff) << 23) | ((m) & 0x7fffff))


Exercício extra:

Escreva uma função float2int, em C ou assembly, para converter um número no formato float para o formato int. Novamente, a função deve fazer a conversão sem usar operações de ponto flutuante.

O protótipo da função é:

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 */
}