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.
- Uma função para converter um número no formato
int
para o formato float
.
- Uma função para converter um número no formato
float
para o formato int
.
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 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...
- 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))
- Uma sugestão de
main
para testar suas funções:
mainlab11.c