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.
- Uma função para converter um número no formato
float
para o formato int
.
- Uma função para converter um número no formato
int
para o formato float
.
Observações:
- Em C, para ter acesso à representação de um número
float
f
,
use o código abaixo:
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...
- Macros para extrair as partes de um float e para compor um float
dado as partes:
#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))