Você está na página 1de 28

Page 1

Vírgula flutuante
Aula 6
Page 2
17 de Março de 2005
Arquitectura de Computadores 2004/05
2 - Aula 6

Estrutura desta aula


Números em vírgula flutuante
Formatos dos números em vírgula fixa e em vírgula
flutuante
A norma IEEE 754
Normalizações, expoentes, zeros e infinitos, e valores
especiais
“Denormals”
Operações fundamentais em vírgula flutuante
Ref: Hennessy & Patterson, H.3
Ref: Patterson & Hennessy (bibliografia suplementar),
3.6
Page 3
17 de Março de 2005
Arquitectura de Computadores 2004/05
3 - Aula 6
Números em vírgula
flutuante
Porque não usar inteiros maiores (com mais bits)?

Porque não números com 128 bits? Ou 256 bits?

Necessária demasiada memória (em número de bits) e hardware
(em número de portas lógicas) para implementar as operações
aritméticas, mesmo as mais simples como a adição
Outros problemas

Não conseguimos representar fracções: ½, ¼, 1/8, 45/78

Ou números reais aproximados: 0,4567896645577

Ou números muito grandes: 1,234 x 10
400

Ou números muito próximos do 0: 1,234 x 10
-66

Page 4
17 de Março de 2005
Arquitectura de Computadores 2004/05
4 - Aula 6

Porque não mudar a vírgula?


Podemos escrever fracções em vírgula fixa

Nos exemplos acima movemos a vírgula para o meio do
número
Os números em vírgula fixa comportam-se como
números
inteiros

A vírgula está sempre num lugar fixo

Um inteiro é um número em vírgula fixa com fracção
reduzida a 0 bits

Porém — algo passa a suceder na aritmética

Page 5
17 de Março de 2005
Arquitectura de Computadores 2004/05
5 - Aula 6

Aritmética em vírgula fixa


A aritmética em vírgula fixa é parecida (mas não igual)
à
aritmética inteira
Primeiro coloca-se a vírgula no resultado,
e em seguida arredonda-se o resultado.
Deve caber em 3 + 3 bits

Page 6
17 de Março de 2005
Arquitectura de Computadores 2004/05
6 - Aula 6

Vírgula flutuante: o que é?


(1)
VF é exactamente o que o nome sugere:

A vírgula não vem fixada na representação binária do
número
Aritmética finita para representar um número infinito
de
números reais?

Suponhamos que temos números com 32 bits

Temos mais de 4 mil milhões – 4 000 000 000 – de padrões
binários para codificar todos os números reais com que
pretendemos trabalhar

Quais os que números que vamos poder representar? E
quais
os que não vamos poder representar?

Existem muitas opções …

Page 7
17 de Março de 2005
Arquitectura de Computadores 2004/05
7 - Aula 6

Vírgula flutuante: o que é?


(2)
4 partes fundamentais num número em vírgula
flutuante
Semelhante à notação científica
- 1,234 x 2
+47
Sinal do número
Vários dígitos significativos.
O número de dígitos correctos
determina a precisão do número.
Normalmente designada por
fracção (ou mantissa)
Base implícita, em geral 2.
Implícita porque não
guardamos o 2 em memória.
O expoente da base. É
com o expoente que
conseguimos representar
números muito grandes
e muito pequenos

Page 8
17 de Março de 2005
Arquitectura de Computadores 2004/05
8 - Aula 6

Vírgula flutuante: o que é?


(3)
4 questões chave no formato de vírgula fixa

Como representar o sinal do número?

Como representar a fracção (mantissa)?

Como representar o expoente?

Quantos bits em cada uma das 4 partes?
No início foi o caos

Cada computador tinha o seu formato de VF, com
problemas
específicos

Virtualmente impossível escrever código portável, ou
garantir as propriedades numéricas de uma computação
“sensível” e necessitada de um elevado número de cálculos
em VF (previsão do tempo, explosão nuclear, …)

Page 9
17 de Março de 2005
Arquitectura de Computadores 2004/05
9 - Aula 6

A norma IEEE 754 para a VF


Desenvolvida 1980 para padronizar a aritmética em
VF, torná-la portável entre diversos processadores, e
maximizar a qualidade numérica dos números e
resultados
de operações
Numa SparcStation, por exemplo, um número em VF
com
32 bits tem o seguinte aspecto
e a interpretação numérica é
Bit #: 31 30 29 . . . 25 24 23 22 21 20 . . . 01 00
Sinal
S
Expoente
e
Fracção ou mantissa
f
(-1)
S
x (1,f) x 2
(e-127)

Page 10
17 de Março de 2005
Arquitectura de Computadores 2004/05
10 - Aula 6

Formato básico (1)


O sinal S

É o sinal do número: 0 = pos, 1=neg.
A fracção f

É um número binário com a “vírgula” colocada
imediatamente
à esquerda do seu bit mais significativo

A fracção NÃO está em complemento para 2 (ou em
qualquer outra notação)

É apenas um número fraccionário positivo

Page 11
17 de Março de 2005
Arquitectura de Computadores 2004/05
11 - Aula 6

Formato básico (2)


Exemplo de fracção
Bit #: 31 30 29 . . . 25 24 23 22 21 20 . . . 01 00
Fracção ou mantissa
f
0x2
-1
+1x2
-2
+0x2
-3
+1x2
-4
+ ... +1x2
-20
+ ... +0x2
-23
=
1/4 + 1/16 + 1/1048576 = 0,31250095367431640625...
f = 0,01010000000000000001000

Page 12
17 de Março de 2005
Arquitectura de Computadores 2004/05
12 - Aula 6

Formato básico (3)


Sobre a fracção

É uma fracção, logo MENOR do que 1

Não tem sinal, apenas um número binário com vírgula à
esquerda
Conceito novo: Normalização

O número em VF que f “cria” é (-1)
S
x (1,f) x 2
(e - 127)

(1,f) é uma forma abreviada de (1 + f)
Porquê o 1 em (1,f)?

Em todos os formatos de VF, a fracção é normalizada, o
que quer dizer que o número vem “modificado” por forma
a
que cada número REAL tenha UMA e APENAS UMA
representação em VF

Precisamos de exemplos …

Page 13
17 de Março de 2005
Arquitectura de Computadores 2004/05
13 - Aula 6

Normalização (1)
Consideremos um formato simplificado em VF (e mais
manejável): fracção com 3 bits, para já o expoente é um
inteiro “e”

O format é: S f1 f2 f3 “expoente e”

O número é (-1)
S
x 0,f1 f2 f3 x 2
(expoente e)
Quero representar o número real “+2”

Por (-1)
0
x 0,1 0 0 x 2
(e = 2)
= + 1/2 x 4 = + 2 ?

Por (-1)
0
x 0,0 1 0 x 2
(e = 3)
= + 1/4 x 8 = + 2 ?

Por (-1)
0
x 0,0 0 1 x 2
(e = 4)
= + 1/8 x 16 = + 2 ?
Múltiplas representações do “+2” não são aceitáveis
Page 14
17 de Março de 2005
Arquitectura de Computadores 2004/05
14 - Aula 6

Normalização (2)
Porque é que esta solução não é viável?

Apenas existe um número finito de padrões binários para
representar todos os reais, já que são limitadas as
dimensões da fracção e do expoente

Se deixarmos que um único valor (por exemplo, o número
2)
seja representado de muitas formas diferentes, então
apenas conseguimos representar um número bastante
reduzido de números reais diferentes
Como resolver o problema?

Precisamos de uma representação “canónica”

Solução possível: a fracção começa sempre com um 1

Não é a solução preconizada pela IEEE (ver à frente)

Page 15
17 de Março de 2005
Arquitectura de Computadores 2004/05
15 - Aula 6

Normalização (3)
Para o número real “+2”

(-1)
0
x 0,1 0 0 x 2
(e = 2)
= + 1/2 x 4 OK, normalizada

(-1)
0
x 0,0 1 0 x 2
(e = 3)
= + 1/4 x 8 Not OK

(-1)
0
x 0,0 0 1 x 2
(e = 4)
= + 1/8 x 16 Not OK
Consequência

Admitir que os operandos necessários à execução de uma
operação em VF já estão normalizados

O hardware deve assegurar-se que o resultado da operação em
VF também vem normalizado

Aqui temos um problema; precisamos de hardware extra, e não
é fácil de implementar

Page 16
17 de Março de 2005
Arquitectura de Computadores 2004/05
16 - Aula 6

Normalização na IEEE 754


(1)
Porque é que a norma IEEE afirma que o número é da
forma … (1+f)… ?

Se normalizarmos uma fracção binária, 0,f1 f2 f3 f4…fn,
estamos a insistir que temos sempre f1=1

(Bem, quase sempre. Se f == 0, então a fracção vem na forma
0.00000…0. Para já, apenas este caso é excepção)

Ou seja, se normalizarmos um número, sabemos que ele é da
forma 0,1 f2 f3 f4 … fn

Page 17
17 de Março de 2005
Arquitectura de Computadores 2004/05
17 - Aula 6

Normalização na IEEE 754


(2)
Para quê representar esse “1” se já sabemos que é um
“1”?

Em vez de usarmos 0,1 f2 f3 f4 … fn para um número
normalizado, usamos 1,f2 f3 f4 … fn

Não interessa para onde vai a vírgula. Pode estar na
extremidade esquerda da representação, ou pode estar
depois do primeiro bit. Mas tem que estar sempre no
mesmo
sítio

No formato IEEE, o “1” é “implícito” (não é, na realidade,
guardado na palavra)

Como só se guardam os bits seguintes, temos mais um bit
de precisão

Em vez de 0,f1 f2 f3 … fn fazemos 1,f2 f3 f4 … fn, que
tem mais um bit

Page 18
17 de Março de 2005
Arquitectura de Computadores 2004/05
18 - Aula 6

Normalização na IEEE 754


(3)
Terminologia especial

Fracção f: 23 bits dos 32 bits de um número VF com precisão
simples na IEEE

Unpacking: processo pelo qual se retira f da representação do
número, e se forma (1,f)

Implícito: nome para o bit a “1” que se acrescenta à esquerda
da vírgula

Significanda: novo nome para o conjunto (1,f)
Bit #: 31 30 . . . 23 22 21 20 19 18 . . . 03 02 01 00
A fracção f, com 23 bits,
está “unpacked” para formar
a SIGNIFICANDA com 24 bits
1,f1 f2 f3 ... f23
Implícito, não
guardado

Page 19
17 de Março de 2005
Arquitectura de Computadores 2004/05
19 - Aula 6

De volta ao formato básico


OK, agora entendemos o bit S de sinal e os bits da
fracção f
Bit #: 31 30 . . . 23 22 21 20 19 18 . . . 03 02 01 00
1,f1 f2 f3 ... f23
Bit de sinal (-1)
S
Bit #: 31 30 . . . 23 22 21 20 19 18 . . . 03 02 01 00

Page 20
17 de Março de 2005
Arquitectura de Computadores 2004/05
20 - Aula 6

Formato básico: expoentes


Como funciona o expoente? Porquê a parte (e - 127)?
Ao “127” dá-se a designação de “bias” (desvio) do expoente

Podemos codificar expoentes negativos ou positivos com o “bias”

O campo “e” é um inteiro de 8 bits (não é um número sem sinal,
nem em compl. para 2, nem em compl. para 1, nem em sinal e
módulo)

É “biased” – uma representação diferente, escolhida por uma razão
específica
Bit #: 31 30 . . . 23 22 21 20 19 18 . . . 03 02 01 00
1,f1 f2 f3 ... f23
Sinal (-1)
S
Expoente e com
8 bits fica
2
(e-127)

Page 21
17 de Março de 2005
Arquitectura de Computadores 2004/05
21 - Aula 6

Expoentes (1)
Outro exemplo simplificado: expoente com 3 bits e2 e1
e0

Se #bits = 3, então o desvio de que precisamos é 2(3-1) -
1 = 3.

Assim sendo, o nosso número será (-1)
S
x (1,f) x 2
(e-3)

Apenas existem 8 padrões binários para o expoente:
e2 e1 e0 signif. expoente
0 0 0 0-3 = -3
0 0 1 1-3 = -2
0 1 0 2-3 = -1
0 1 1 3-3 = 0
1 0 0 4-3 = 1
1 0 1 5-3 = 2
1 1 0 6-3 = 3
1 1 1 7-3 = 4
Não é simétrico. Mais um
positivo do que negativos
Bits e2 e1 e0 “ordenados”
da mesma forma que usaríamos
para um expoente real
com sinal

Page 22
17 de Março de 2005
Arquitectura de Computadores 2004/05
22 - Aula 6

Expoentes (2)
O “ordenados da mesma forma” é a razão porque
usamos
um expoente desviado (“biased”)

Consideremos um formato simplificado, com 1 bit de sinal,
3
bits para f, 3 bits para e: [s0 e2 e1 e0 f1 f2 f3]

Consideremos 2 números:
[0 001 110] = +0,110 x 2
(1 - 3)
= +(1/2+1/4) x 2
-2
= +0,1875
[0 101 110] = +0,110 x 2
(5 - 3)
= +(1/2+1/4) x 2
2
= +3

Se compararmos apenas os padrões binários [0 001 110] e
[0 101 110] como se fossem inteiros sem sinal, podemos
concluir sobre os valores relativos dos números

Ex: 0001110 < 0101110 considerados como inteiros sem
sinal. Mas também +0,1875 < +3

A comparação de dois números em VF vem simplificada

Page 23
17 de Março de 2005
Arquitectura de Computadores 2004/05
23 - Aula 6

Porque não funciona com o compl.


para 2
Exemplo

Usando o formato simplificado, a interpretação dos
expoentes se fosse em complemento para 2:

+0,1875 = +(1/2 + 1/4) x 2
-2
= [0 110 110]

+3 = +(1/2 + 1/4) x 2
2
= [0 010 110]

0110110 > 0010110 mas +1,875 < +3

Page 24
17 de Março de 2005
Arquitectura de Computadores 2004/05
24 - Aula 6

Formatos específicos da IEEE


754
O formato IEEE acrescenta algumas peculiariedades

“Reserva” 2 padrões binários do expoente e usa-os para fins
especiais
e7 e6 e5 e4 e3 e2 e1 e0 (e-127) significado
0 0 0 0 0 0 0 0 -127 = Emin-1
0 0 0 0 0 0 0 1 -126 = Emin
0 0 0 0 0 0 1 0 -125
0 0 0 0 0 0 1 1 -124
...
1 1 1 1 1 1 0 1 126
1 1 1 1 1 1 1 0 127 = Emax
1 1 1 1 1 1 1 1 128 = Emax+1
Padrão especial: tudo a “0”s
Padrão especial: tudo a “1”s
Padrões de expoente que
podem ser utilizados para
representar um número real.
Emin=-126, Emax=+127

Page 25
17 de Março de 2005
Arquitectura de Computadores 2004/05
25 - Aula 6

Interpret. de um número na
IEEE
Nem todos os padrões geram números “reais”

3 casos para o expoente e, baseados em Emin= -126,
Emax=+127

e = Emin-1 significa e = -127

Emin<=e<=Emax, ou seja, e no intervalo [-126, +127]

e = Emax+1 significa e = +128

2 casos para a fracção f:

f = 0 (todos os 23 bits a 0)

f != 0

O bit de sinal não tem função nenhuma em particular,
apenas designa o sinal do número em VF
Vamos construir uma matriz com todos os casos

No início parece complexo, mas faz sentido

Page 26
17 de Março de 2005
Arquitectura de Computadores 2004/05
26 - Aula 6

Matriz de interpretação (1)


3 para o expoente, 2 para a fracção = 6 possibilidades
Sinal S=0
+∞
Sinal S=0
+0
e=00000000
E=Emin-1=
=-127
e=xxxxxxxx
no intervalo
[-126,+127]
e=11111111
E=Emax+1=
=+128
f=0000 ... 00
f!=0000 ... 00
=xxxx ... xx
Denormalized
numbers
Not a Number
NAN
Sinal S=1
-∞
Sinal S=1
-0
Ordinary num
(-1)
S
x (1,f) x 2
(e-127)

Page 27
17 de Março de 2005
Arquitectura de Computadores 2004/05
27 - Aula 6

Matriz de interpretação (2)


Se expoente diferente de 00000000 ou 11111111, então
é um número ordinário em VF
Sinal S=0
+∞
Sinal S=0
+0
e=00000000
E=Emin-1=
=-127
e=xxxxxxxx
no intervalo
[-126,+127]
e=11111111
E=Emax+1=
=+128
f=0000 ... 00
f!=0000 ... 00
=xxxx ... xx
Denormalized
numbers
Not a Number
NAN
Sinal S=1
-∞
Sinal S=1
-0
Ordinary num
(-1)
S
x (1,f) x 2
(e-127)

Page 28
17 de Março de 2005
Arquitectura de Computadores 2004/05
28 - Aula 6

Zeros e infinitos
e = 0, f = 0 significa número = 0. São permitidos +0, -0
e= 11...1, f=0 significa núm = ∞. São permit. + ∞, - ∞
Sinal S=0
+∞
Sinal S=0
+0
e=00000000
E=Emin-1=
=-127
e=xxxxxxxx
no intervalo
[-126,+127]
e=11111111
E=Emax+1=
=+128
f=0000 ... 00
f!=0000 ... 00
=xxxx ... xx
Denormalized
numbers
Not a Number
NAN
Sinal S=1
-

Sinal S=1
-0
Ordinary num
(-1)
S
x (1,f) x 2
(e-127)

Page 29
17 de Março de 2005
Arquitectura de Computadores 2004/05
29 - Aula 6

Infinitos (1)
Porquê os padrões especiais?

Num sistema de numeração com um número de bits finito,
podemos ter números com módulos demasiado grandes
para
os conseguirmos representar com o número de bits
disponível

Exemplo: com uma fracção f com 3 bits e um expoente e
com 3 bits, o maior módulo (finito) é:
(1,111) x 2
(6 -3)
= (1,875) x 2
3
= 15

Lembrar que o expoente e=111 é especial, reservado para
os INFINITOS; é por isso que o expoente do número acima
é e=110
Page 30
17 de Março de 2005
Arquitectura de Computadores 2004/05
30 - Aula 6

Infinitos (2)
O que acontece se somarmos 1 ao número com o maior
módulo?

Já não temos padrões binários para representar o
resultado!
Faltam bits!

Provocamos OVERFLOW na operação de adição em VF,
porque o número que queremos é demasiado grande

Porém, na aritmética da norma IEEE coloca-se o resultado
em + ∞ou - ∞e continua-se!

+

= (1.000) x 2
(7-3)
= (1.000) x 2
4
= 16 (!)
Page 31
17 de Março de 2005
Arquitectura de Computadores 2004/05
31 - Aula 6

Zeros
Um padrão todo com 0s significa o número +0

Mas o que realmente significa é (-1)
0
x (1.0) x 2
(0-127)
!
Bom para testar o 0
Sinal S=0
+∞
Sinal S=0
+0
e=00000000
E=Emin-1=
=-127
e=xxxxxxxx
no intervalo
[-126,+127]
e=11111111
E=Emax+1=
=+128
f=0000 ... 00
f!=0000 ... 00
=xxxx ... xx
Denormalized
numbers
Not a Number
NAN
Sinal S=1
-∞
Sinal S=1
-0
Ordinary num
(-1)
S
x (1,f) x 2
(e-127)

Page 32
17 de Março de 2005
Arquitectura de Computadores 2004/05
32 - Aula 6

NaN: Not a Number (1)


Alguns resultados de operações não fazem sentido (não
são reais)

Estes resultados “não são um número”, são NaN

Exemplo:

/0, (

-

), (-1)
1/2

Page 33
17 de Março de 2005
Arquitectura de Computadores 2004/05
33 - Aula 6

NaN: Not a Number (2)


Sinal S=0
+∞
Sinal S=0
+0
e=00000000
E=Emin-1=
=-127
e=xxxxxxxx
no intervalo
[-126,+127]
e=11111111
E=Emax+1=
=+128
f=0000 ... 00
f!=0000 ... 00
=xxxx ... xx
Denormalized
numbers
Not a Number
NAN
Sinal S=1
-∞
Sinal S=1
-0
Ordinary num
(-1)
S
x (1,f) x 2
(e-127)

Page 34
17 de Março de 2005
Arquitectura de Computadores 2004/05
34 - Aula 6

NaN: Not a Number (3)


NaN

A regra básica é simples: se um dos operandos numa
operação fundamental (add, sub, mult, div) é um NaN,
então o resultado também é um NaN
Notas

Note-se que o padrão com os 32 bits todos a “1” é um
NaN. Fácil de lembrar

Note-se que o padrão com os 32 bits todos a “0” é um
ZERO. Também é fácil de lembrar

Os INFINITOS são mais complicados: e=“tudo 1s”, f=“tudo
0s”, o bit de sinal importa
Page 35
17 de Março de 2005
Arquitectura de Computadores 2004/05
35 - Aula 6

Denormals (1)
Uma outra categoria de números (a última): os
“denormals” ou “denormalized numbers”

Não são normalizados como todos os outros números

Permitem a representação de números mais pequenos com
precisão menor

Page 36
17 de Março de 2005
Arquitectura de Computadores 2004/05
36 - Aula 6

Denormals (2)
Sinal S=0
+∞
Sinal S=0
+0
e=00000000
E=Emin-1=
=-127
e=xxxxxxxx
no intervalo
[-126,+127]
e=11111111
E=Emax+1=
=+128
f=0000 ... 00
f!=0000 ... 00
=xxxx ... xx
Denormalized
numbers
Not a Number
NAN
Sinal S=1
-∞
Sinal S=1
-0
Ordinary num
(-1)
S
x (1,f) x 2
(e-127)

Page 37
17 de Março de 2005
Arquitectura de Computadores 2004/05
37 - Aula 6

Denormals (3)
Qual é o número em VF na norma IEEE 754 com o
menor
módulo?
Bit #: 31 30 . . . 23 22 21 20 19 18 . . . 03 02 01 00
O menor valor legal para f é
f=00000 ... 0.
Significanda “unpacked” é 1,0
O menor
expoente legal é
00000001
que é igual a
2
(1-127)
=2
(-126)
Logo, o menor número normalizado e legal é
1,0 x 2
(-126)

Page 38
17 de Março de 2005
Arquitectura de Computadores 2004/05
38 - Aula 6

Próxima aula
Principais características dos processadores RISC
Estrutura de um processador (MIPS) sem pipeline, de
ciclo único
O “datapath” ou circuito de dados
A unidade de controlo

Você também pode gostar