Vous êtes sur la page 1sur 21

Representao em Ponto

Flutuante

Representao em Ponto Flutuante


Aproximao de aritmtica de nmeros reais
Codifica nmeros racionais da forma V = x * 2y
til para computaes com valores muito grandes
(|V| >> 0) ou muito prximos de 0 (|V| << 1)

Padro IEEE-754 (~1985)


representao de nmeros de ponto flutuante e suas
operaes
adotado atualmente pela maioria dos fabricantes
portabilidade!
2

Nmeros Fracionrios na Base 2


Notao decimal:

i * d
dm dm-1 ... d1 d0 d-1 d-2 ... d-n i
10
i
= -n

12.3410 = 1 * 101 + 2 * 100 + 3 * 10-1 + 4 * 10-2


potncias POSITIVAS de 10

Notao binria:

potncias NEGATIVAS de 10

bm bm-1 ... b1 b0 b-1 b-2 ... b-n 2i * bi


i = -n

101.112 = 1 *22 + 0 *21 + 1 * 20 + 1 * 2-1 + 1 * 2-2


potncias POSITIVAS de 2

ponto/vrgula
binrio

potncias NEGATIVAS de 2

= 4 + 1 + + = 5 = 5.75
3

Notao Binria
2m

2m1

4

2

1

b2
b1
b0
.
b1
b2
b3

bn

1/2

1/4

1/8

bm
bm1

2n

posies direita do ponto binrio correspondem a


potncias negativas de 2
nmeros da forma 0.1111112 esto prximos de 1.0
4

Deslocamento do Ponto Binrio


Deslocar o ponto para a esquerda divide o valor
por 2:
101.112 = 4 + 1+ + = 5 = 5.75
10.1112 = 2 + + + 1/8 = 2 7/8 = 2.875 = 5.75/2

Deslocar o ponto para a direita multiplica o valor


por 2:
101.112 = 4 + 1+ + = 5 = 5.75
1011.12 = 8 + 0 + 2 + 1 + = 11 = 5.75 * 2
5

Converso binrio decimal


1.001 = 1 * 20 + 1 * 2-3 = 1 + 1/8 = 9/8 = 1.125
101.111 = 1 * 22 + 1 * 20 + 1 * 2-1 + 1 * 2-2 + 1 * 2-3 =
5 + 1/2 + 1/4 + 1/8 = 5 + 7/8 = 5.875
11.0011 = 1 * 21 + 1 * 20 + 1 * 2-3 + 1 * 2-4 =
3 + 1/8 + 1/16 = 3 + 3/16 = 3.1875

Converso decimal binrio (1)


Idia bsica: representar um nmero como uma frao
da forma x / 2k
encontra a representao de x e posiciona o ponto k casas a
partir da direita

0.125 = 0.25/2 = 0.5/4 = 1/8 = 1/ 23 0.0012


desloca ponto 3 casas

0.75 = 1.5/2 = 3/4 = 3/22 0.11


desloca ponto 2 casas

2.6875 = 5.375/2 = 10.75/4 = 21.5/8 = 43/16 = 43/24


10.1011
desloca ponto 4 casas

Converso decimal binrio (2)


Parte fracionria:
0.d1d2d3 ... dm

*2

0
1

*2

x .d1d2d3 ... dk
0.d1d2d3 ... dk
*2

0.b1b2b3... bn

b1 .b2b3... bn

0.b2b3... bn
*2

0
1

y .d1d2d3 ... dk
*2

0.x

b2 .b3... bn

0.xy

*2

Exemplo de converso
0.625

*2

0.b1b2b3... bn
*2

1 .25

b1 .b2b3... bn

0.25

=
*2

0.b2b3... bn
*2

0 .5

b2 .b3... bn

0.5

=
*2

1 .0

0.1

0.10

0.b3... bn
*2

0.101

b3 .b4... bn

0.101 = 1 * 2-1 + 1 * 2-3 = 1/2 + 1/8 = 5/8 = 0.625

Limitaes da Representao
Com codificao de tamanho finito a notao decimal
no pode representar nmeros como 1/3 ou 5/7
no podem ser escritos como

d k 10 k

k=- n

Da mesma forma, a notao binria somente pode


representar nmeros escritos como m b 2 k
1/8 (= 0.125)
5.625 (= 45/8)

0.0012
101.1012

k=- n

Outros nmeros devem ser aproximados


parte fracionria possui sequncias repetidas indefinidamente
quanto maior a representao binria (parte fracionria), maior a
acurcia (preciso)
10

Utilizando o algoritmo de
converso
0.2 * 2

0 .4

0.4 * 2

0 .8

0.8 * 2

1 .6

0.6 * 2

1 .2

0.2 * 2

0 .4

0.4 * 2

0 .8

.
.
.

0.0011 0011 0011...

11

Representao IEEE 754


Notao posicional no adequada para nmeros muito
grandes ou prximos de 0
sequncias muito grandes de bits

A idia representar o nmero na forma x * 2 y para


um par adequado de valores (x,y)
para obter a melhor preciso

Define trs precises:


Single precision (float)
Double precision (double)
Double extended precision

32 bits (preciso 24 bits)


64 bits (preciso 53 bits)
80 bits (preciso 63 bits)

esta ltima em arquiteturas Intel Pentium e 68000


12

Codificao
Forma numrica

(1)s M 2E
Bit de sinal s determina se nmero negativo ou positivo
Mantissa M um valor fracionrio 1 <= M < 2
Expoente E especifica potncia positiva ou negativa de 2
s

exp

frac

Bit mais significativo s s = 1 : n negativo, s = 0 : n positivo


Campo exp codifica E
Campo frac codifica M
13

Padro IEEE: precises


s

exp

frac

float (32 bits): exp = 8 bits, frac = 23 bits, s = 1 bit


faixa de valores: 2-126 at 2127
double (64 bits): exp =11 bits, frac = 52 bits, s = 1 bit
faixa de valores: 2-1022 at 21023
preciso estendida (80 bits): exp =15 bits, frac = 63 bits, s = 1 bit
faixa de valores: 2-16382 at 216383
menos comum

14

Padro IEEE: representaes


O valor codificado dividido em 3 categorias,
dependendo do valor de exp:
valor normalizado (mais comum)
valor denormalizado (exp == all 0s)
valores especiais (exp = all 1s)

Valor denormalizado (exp = 0):


representao de 0 (s = exp = frac = 0)
representao de nmeros muito prximos a 0 (-1 < x < 1)

Valores especiais:
infinito e NaN (Not a Number)
15

Valores Normalizados
s exp 0 & 1s

M = 1 + frac

(1)s M 2E

frac

1 implcito (1 <= M < 2)

frac = 00..0 M = 1.0


frac = 010100 M = 1 + 1/4 + 1/16 = 1 + 5/16 = 1.3125

E = exp Bias

representao em excesso

exp um valor sem sinal e Bias = 2k-1 - 1


float (preciso simples): Bias = 127 (28-1 1 = 27 1 = 128 1)
double(preciso dupla): Bias = 1023 (211-1 1 = 210 1 = 1024 1)
preciso simples:
exp = 1 E = 1 127 = -126
exp = 127 E = 127 127 = 0
exp = 254 E = 254 127 = 127

preciso dupla:
exp = 1 E = 1 1023 = -1022
exp = 1023 E = 1023 1023 = 0
exp = 2046 E = 2046 1023 = 1023
16

Exemplo 1 (preciso simples)


float f = 15213.0;
1521310 = 111011011011012 = 1.11011011011012 * 2 13
13 casas para a esquerda

frac (23 bits) = 110110110110100000000002


exp (8 bits) = E + Bias = 13 + 127 = 140 = 100011002
s = 0

31

30

23 22

0 10001100 11011011011010000000000
Binrio
Hex:

0100 0110 0110 1101 1011 0100 0000 0000


4

0
17

Exemplo 2 (preciso simples)


4

Hex:
Binrio

0100 0110 0100 0000 1110 0100 0000 0000


31

30

23 22

0 10001100 10000001110010000000000

frac = 10000001110012 M = 1.1000000111001


M = 1 + 1/2 + 1/256 + 1/512 + 1/1024 + 1/8192
= 1 + 4153/8192
exp = 10001100 = 8C16 = 128 + 12 = 140
E = 140 127 = 13
V = (-1)0 * (1 + 4153/8192) * 213
= ((8192 + 4153)/8192) * 8192 = 1234510
18

Exemplo 3 (preciso dupla)


double d = 178.125;
178.12510 = 178 + .125 = 178 + 1/8 = 128 + 32 + 16 + 2 + 2-3
= 10110010.0012 = 1.01100100012 * 2 7
E

7 casas para a esquerda

frac (52 bits) = 01100100010000002


exp (11 bits) = E + Bias = 7 + 1023 = 1030 = 100000001102
s = 0

Binrio
Hex:

63

62

52

10000000110

51

01100100010000000000

0100 0000 0110 0110 0100 0100 0000 0000 0000


4

00 00 00 00
19

Valores Especiais

zero

S= 0

exp = 0

M=0

S=0

exp=111...111

M=0

S=1

exp=111...111

M=0

NaN(*)

exp=111...111

M0

infinito : permite representao de overflow


multiplicao, diviso por 0

NaN (Not a Number)


operaes que no tem nmero real como resultado (-1 , - )
pode ser usado para representar dados no inicializados

em C: macros em <math.h>
20

Valores Denormalizados
s

exp = 0

frac

(1)s M 2E

representao de 0 e nmeros muito prximos de 0


M = frac

no tem 1 implcito (0 <= M < 1)

E = 1 Bias

21

Vous aimerez peut-être aussi