Você está na página 1de 8

Representao em Ponto

Flutuante

Nmeros Fracionrios em
repr.2 binria
i

2i1
4
2
1

bi bi1

b2 b1 b0 . b1 b2 b3
1/2
1/4
1/8

bj

2j

Bits direita do ponto binrio representam potncias de 2


fracionrias
i
k
O nmero racional representado como:

bk 2

k = j

Exemplos
Nmero
5 + 3/4
2 + 7/8
63/64

Representao
101.112
10.1112
0.1111112

Observaes
Diviso por 2: shift right
Multiplicao por 2: shift left
Nmeros da forma 0.1111112 esto
prximos de 1.0
1/2 + 1/4 + 1/8 + + 1/2i + 1.0

Esta representao tem limitaes

Limitao
possvel representar exatamente apenas nmeros racionais que
tenham parte fracionria da forma:
0
Exemplos
k
bk 2

Nmero
Representao
=
k j
1/8 (= 0.125)
1/16 (= 0.0625)
5.625

0.0012
0.00112
101.1012

Outros nmeros possuem sequncias de bits repetidas


indefinidamente a representao binria no precisa
Exemplos:
Nmero
Representao
1/3
1/5
1/10

0.0101010101[01]2
0.001100110011[0011]2
0.0001100110011[0011]2

Um problema desta representao: nmeros muito grandes ou muito


pequenos necessitariam de uma sequncia muito longa de bits

Representao IEEE
As mais diversas representaes de ponto
flutuante j foram propostas, mas
O padro IEEE 754 atualmente o mais
utilizado:
Criado em 1985 como padro para representao e
aritmtica em ponto flutuante
Implementado na grande maioria das CPUs

Define trs precises:


Single precision (float)
32 bits (preciso 24 bits)
Double precision (double) 64 bits (preciso 53 bits)
Double extended precision 80 bits (preciso 63 bits)
Obs: esta ltima somente em arquiteturas Intel-like

Padro IEEE 754


Forma numrica
(1)s M 2E
Bit de sinal s determina se nmero negativo ou
positivo
Mantissa M um valor fracionrio no intervalo
[1.0,2.0), na representao normalizada.
Expoente E

Codificao
s

exp

frac

bit mais significativo s


Campo exp codifica E
Campo frac codifica M

IEEE 754: Precises de


Ponto Flutuante
s

exp

frac

Tamanhos
float: exp = 8 bits, frac = 23 bits, s = 1 bit
Total: 32 bits
Faixa de valores: 2-126 at 2127

double: exp =11 bits, frac = 52 bits, s = 1 bit


Total: 64 bits
Faixa de valores: 2-1022 at 21023

Preciso estendida: exp =15 bits, frac = 63 bits,s = 1 bit


Total: 80 bits
Faixa de valores: 2-16382 at 216383
1 bit desperdiado

Padro IEEE 754


Define-se duas representaes:
Normalizada (mais utilizada)
De-normalizada: para representar o 0 e
nmeros cujo mdulo [0, 1)
N t caso, exp = 0
Neste
E = 1 Bias
M = frac

Faixa de Valores
Normalizado

De-normalizado

]
-1

Normalizado

[
0

De-normalizado: f (-1,1)
exp = 0,
0 M = frac
f

Normalizado: f (-,1] [1, +)


exp 0 (00..01 11..10), M= 1.0 + frac

Mantissa na rep. normalizada


O padro estabelece uma representao
normalizada, com valores 1 <= M < 2. Isto
possvel escolhendo
possvel,
escolhendo-se
se o Exp adequadamente.
adequadamente
Como a mantissa sempre da forma
M = 1+ frac
Armazena-se apenas a parte fracionria frac. Ou
seja, a soma com 1 sempre implcita.
Exemplos:
frac = 0...02 = 010
frac = 0101...02 = 0.25 + 0.062510

M = 1.0
M = 1,03125

O Exponte na rep. normalizada


O Expoente E, pode ser positivo ou negativo,
mas no armazenado em complemento a dois
Usa
Usa-se
se a representao
representao excesso
excesso (ou bias)
E = Exp Bias
Exp : valor sem sinal representado por exp
Bias : valor de excesso
127 em float (Exp: 1254, E: -126127)
1023 em double (Exp: 12046, E: -10221023)
2n-1 1 (no caso geral), onde n o nmero de bits em exp

Exemplos:
exp = 1
exp = 127
exp = 225

E = (1-127) = -126
E = (127-127) = 0
E = (225-127) = 98

Exemplo (preciso simples)


Valor
float F = 15213.0;
1521310 = 111011011011012 = 1.11011011011012 X 213

Mantissa
M =
frac

Expoente
E =
exp =

1.11011011011012
=
110110110110100000000002
13
E + Bias = 13+ 127 = 140 =

100011002

Sinal:

Hex:
Binrio

4
6
6
D
B
4
0
0
0100 0110 0110 1101 1011 0100 0000 0000

140:
15213:

100 0110 0
1110 1101 1011 01

Exemplo (preciso dupla)


Valor
double D = 178.125 = 128+32+16+2 + 0.125;
178 12510 = 10110010.001
178.125
10110010 0012
1.7812510 = 1.01100100012 X 27

Mantissa
M =
frac

Expoente
p
E =
exp =
0
S

1. 01100100012
=
01100100010002
7
E + Bias = 7+ 1023 = 1030 =

100000001102

01100100010000000

10000000110
exp (11)

frac (52)

Valores Especiais

zero

S= 0

exp = 0

M=0

+
-
NaN(*)
()

S=0
S=1
S=0

exp=111...111
exp=111...111
exp=111...111
p

M=0
M=0
M0

(*) NaN = Not a Number

A aritmtica com esses nmeros


Para qualquer ponto flutuante a vale:
a+ =
a + - = -
+ - = NaN
NaN + a = NaN
-1 = NaN
a / = 0
* =
a / 0 = , se a0
0 / 0 = NaN
/ = NaN
* 0 = NaN

Mais informaes
htt // t
http://steve.holasch.net/cgindex/Ieeefloat.html
h l
h t/ i d /I
fl t ht l
IEEE Computer Society (1985) IEEE Standard for Binary
Floating-Point Aritmetic, IEEE Std 754-1985.
Comparing floating point numbers, Bruce Dawson.
http://www.cygnus-software.com/papers

Você também pode gostar