Vous êtes sur la page 1sur 0

7-1

Captulo
SETE
Nmeros em Ponto Fixo e Ponto Flutuante
7. 1 Nmeros em ponto fixo
Observao inicial: os termos ponto fixo e ponto flutuante so tradues diretas dos
termos ingleses fixed point e floating point, que se referem ao smbolo utilizado nos
pases de lngua inglesa para representar a vrgula decimal. As tradues corretas seriam,
respectivamente, vrgula fixa e vrgula flutuante. Entretanto, devido ao fato dos termos
ponto fixo e ponto flutuante j serem de uso corrente na literatura especializada nacional,
eles sero empregados aqui tambm .
Todos os nmeros tratados at agora foram nmeros inteiros, onde uma vrgula binria no
apareceu explicitamente. Entretanto, estes nmeros podem ser interpretados como
apresentando uma vrgula direita do dgito menos significativo (a posio das unidades).
Assim, por exemplo, o nmero binrio em complemento de dois
0 1 1 0 0 1 1 1
que corresponde ao nmero decimal 103, pode ser interpretado como apresentando uma
vrgula extrema direita
0 1 1 0 0 1 1 1,
sem que isto altere o valor por ele representado. Tem-se ento uma representao em ponto
fixo, mas sem parte fracionria. Caso deseje-se representar fraes, deve-se reservar um
certo nmero de bits para isto. Naturalmente, a quantidade de bits utilizveis para a parte
inteira diminui correspondentemente. Por exemplo, para a mesma cadeia de bits acima, tem-
se os seguintes nmeros, conforme a posio da vrgula:
0 1 1 0 0 1 1, 1 Decimal = 51,5 (1 bit para frao)
0 1 1 0 0 1, 1 1 Decimal = 25,75 (2 bits para frao)
0 1 1 0 0, 1 1 1 Decimal = 12,875 (3 bits para frao)
0 1 1, 0 0 1 1 1 Decimal = 3,21875 (5 bits para frao)
0, 1 1 0 0 1 1 1 Decimal = 0,8046875 (7 bits para frao)
, 01 1 0 0 1 1 1 Decimal = 0,40234375 (8 bits para frao)
Ao contrrio dos exemplos acima, a vrgula no representada explicitamente. Para uma
determinada notao em ponto fixo, indica-se somente quantos bits so usados para a frao
e quantos bits representam a parte inteira. Todos os nmeros manipulados seguem ento a
mesma notao. Dos n bits utilizados para representar os nmeros, utilizam-se ento t bits
(t0) para a parte inteira e f bits (f0) para a parte fracionria, com a restrio de que
t+f=n. Observe-se ainda que:
7-2
a quantidade total de valores representveis permanece a mesma (2
n
), independente da
posio da vrgula (isto , independente dos valores de te f).
a faixa de valores representveis depende da posio da vrgula (e da conveno
utilizada, naturalmente). De um modo geral, a faixa dada pelas mesmas frmulas
vistas anteriormente (sinal/magnitude, complemento de dois, etc), mas todos os
nmeros so agora divididos por um fator igual a 2
f
. Assim, por exemplo, em
complemento de dois, o maior nmero negativo dado por 2
n-1
/2
f
(ou seja, 2
n-f-1
);
o maior nmero positivo calculado por (2
n-1
1)/2
f
.
os nmeros fracionrios no so contnuos, mas sim esto separados entre si por uma
diferena igual a 2
-f
.
A tabela a seguir ilustra estas observaes para nmeros de 8 bits, representados em
complemento de dois (a coluna intervalo indica a diferena entre dois nmeros consecutivos):
n t f Quant. num. Menor num. Maior num. Intervalo
8 8 0 256 -128 127 1
8 7 1 256 -64 63,5 0,5
8 6 2 256 -32 31,75 0,25
8 5 3 256 -16 15,875 0,125
8 4 4 256 -8 7,9375 0,0625
8 3 5 256 -4 3,96875 0,03125
8 2 6 256 -2 1,984375 0,015625
8 1 7 256 -1 0,9921875 0,0078125
8 0 8 256 -0,5 0,49609375 0,00390625
Tabela 7.1 - Nmeros em ponto fixo de 8 bits
7. 2 Soma e subtrao em ponto fixo
As operaes de soma e subtrao em ponto fixo se realizam exatamente da mesma maneira
que para nmeros inteiros. Naturalmente, somente podem ser somados (ou subtrados)
nmeros que possuam a mesma posio para a vrgula. Ou seja, t e f devem ser iguais
para todos os operandos.
Entretanto, nmeros em ponto fixo com diferentes posies para a vrgula tambm podem
ser operados, desde que um dos nmeros seja convertido para a representao do outro.
Sejam os nmeros m
1
e m
2
, com comprimentos t
1
e f
1
, e t
2
e f
2
, respectivamente.
O resultado deve ter a representao de m1, ou seja, comprimentos t
1
e f
1
para as partes
inteira e fracionria.
Se t
1
> t
2
(a parte inteira de m
1
utiliza mais bits que a parte inteira de m
2
), ento valem as
regras:
1. A parte inteira de m
2
, com t
2
bits, deve ser extendida para t
1
bits. Os bits devem ser
tais que o sinal e o valor do nmero sejam mantidos. Assim, por exemplo, para
nmeros inteiros positivos, t
1
t
2
bits em zero so acrescentados esquerda de m
2
.
Para nmeros em complemento de dois, o sinal deve ser duplicado para a esquerda por
t
1
t
2
bits.
2. A parte fracionria de m
2
deve ser reduzida para f
1
bits. Isto pode ocorrer de duas
maneiras: por truncagem ou por arredondamento. Na truncagem, os f
2
f
1
bits a direita
de m
2
so simplesmente eliminados. No arredondamento, primeiro soma-se 2
(f
1
+1)

7-3
m
2
e depois realiza-se a truncagem. Note-se que isto equivale a somar um 1 na
posio f
2
f
1
do nmero; em termos aritmticos, significa que se a frao a ser
eliminada maior ou igual a 0,5 arredonda-se para cima, seno arredonda-se para
baixo.
A tabela abaixo ilustra alguns exemplos de converso. Considere-se que o nmero final deve
ser representado com 4 bits de parte inteira e 4 bits de parte fracionria. T representa a nova
frao sob truncagem, e A representa a nova frao sob arredondamento.
Num.original Representao Parte inteira Frao (T) Frao (A)
01,101101 Int. positivo 0001 1011 1011
11,101101 Int. positivo 0011 1011 1011
010,00111 Int. positivo 0010 0011 0100
01,101101 Compl.dois 0001 1011 1011
11,101101 Compl.dois 1111 1011 1011
010,00111 Compl.dois 0010 0011 0100
Tabela 7.2 - Exemplos de reduo de frao
Se t
1
< t
2
(a parte inteira de m
1
utiliza menos bits que a parte inteira de m
2
), ento valem
as regras:
1. A parte inteira de m
2
, com t
2
bits, deve ser reduzida para t
1
bits. Isto s possvel se
esta parte inteira puder ser representada com somente t
1
bits. Se isto no for possvel,
a operao no pode ser realizada, pois ocorre estouro de representao. Para esta
reduo valem as regras analisadas na multiplicao, quando se reduzia um nmero de
2n bits para n bits.
2. A parte fracionria de m
2
deve ser ampliada para f
1
bits. Para isto, simplesmente
acrescenta-se f
1
f
2
bits em zero direita da frao de m
1
.
A tabela a seguir ilustra alguns exemplos de converso. Considere-se que o nmero final
deve ser representado com 4 bits de parte inteira e 4 bits de parte fracionria.
Num.original Representao Parte inteira Frao
01101,101 Int. positivo 1101 1010
111011,01 Int. positivo Estouro 0100
01000,111 Int. positivo 1000 1110
0110110,1 Compl.dois Estouro 1000
11101,101 Compl.dois 1101 1010
0001011,1 Compl.dois Estouro 1000
Tabela 7.3 - Exemplos de reduo de mantissa
Observe-se que sempre possvel converter um nmero em ponto fixo para uma
representao que tenha menos bits na parte fracionria (ou mais bits na parte inteira),
enquanto que o contrrio nem sempre possvel Assim, quando se deve operar dois
nmeros em ponto fixo com t1 e t2 diferentes, costuma-se normalizar os operandos para
aquela representao com maior parte inteira.
7. 3 Multiplicao em ponto fixo
A operao de multiplicao em ponto fixo se realiza exatamente da mesma maneira que a
multiplicao de nmeros inteiros (com ou sem sinal). Deve-se somente observar a nova
posio da vrgula: se os dois operandos (de n bits cada) tiverem t bits de parte inteira e
f bits de parte fracionria, o resultado apresentar 2n bits, com 2t bits de parte inteira e
2f bits de parte fracionria.
7-4
De um modo mais geral, se o multiplicando apresentar t
1
e f
1
bits para as partes inteira e
fracionria, e se o multiplicador tiver t
2
e f
2
bits, ento o resultado ter t
1
+t
2
bits na parte
inteira e f
1
+f
2
bits na parte fracionria. Como na multiplicao inteira, nunca ocorre estouro
de representao se forem considerados todos os bits do resultado.
Aps a multiplicao, se o resultado deve ser reduzido para n bits (t + f), isto deve ser feito
em duas etapas:
1. A reduo da parte inteira para t bits. Para isto elimina-se os bits mais significativos,
da mesma maneira que o realizado para a multiplicao inteira. Nesta reduo pode
ocorrer estouro.
2. A reduo da parte fracionria para f bits. Para isto eliminam-se os bits menos
significativos, por truncagem ou por arredondamento, tal como foi explicado na soma
de nmeros em ponto fixo.
7. 4 Diviso em ponto fixo
A operao de diviso em ponto fixo realizada exatamente da mesma maneira que a diviso
de nmeros inteiros, observando-se as posies das vrgulas do dividendo e do divisor. Os
algoritmos de diviso inteira necessitam de 2n bits para o dividendo e n bits para o
divisor. Se o divisor tem t bits inteiros e f bits de frao, ento o dividendo deve
apresentar 2t bits na parte inteira e 2f bits na parte fracionria.
1. Para estender a parte inteira, duplicam-se os bits mais significativos de acordo com a
representao (zeros para nmeros positivos, ou com o bit de sinal para nmeros em
complemento de 2).
2. Para estender a parte fracionria, basta acrescentar zeros direita.
Desta maneira obtm-se, aps a execuo da diviso, um quociente em n bits (t+f) e um
resto, tambm em n bits (mas com 2f bits de parte fracionria!).
7. 5 Nmeros em ponto flutuante
A faixa de nmeros que podem ser representados em ponto fixo insuficiente para a maioria
das aplicaes cientficas, onde existe a necessidade de representar-se nmeros muito
grandes e/ou nmeros muito pequenos. Para contornar este problema, desenvolveu-se a
notao cientfica, onde um quintilho representado por 1,0 x 10
18
, em vez de escrev-lo
por extenso (1 000 000 000 000 000 000). A representao de nmeros em ponto flutuante
basicamente a verso binria da notao cientfica.
A cada nmero em ponto flutuante esto associados na realidade trs outros nmeros: a
mantissa m, o expoente e e a base b. No caso dos computadores atuais, a base utilizada
a binria, ou seja, b=2. O nmero em ponto flutuante ento calculado por:
N = m x b
e
Como a base uma constante para um determinado sistema, o nmero em ponto flutuante
ento representado por um par (m,e), onde m uma frao ou um inteiro, e e o exponte
(sempre um inteiro). Note-se que ambos, mantissa e expoente, podem ser positivos ou
negativos.
A preciso de um nmero em ponto flutuante determinada primariamente pelo nmero de
bits utilizados pela mantissa. A faixa de representao R depende do nmero de bits do
expoente. Apesar dos nmeros em ponto flutuante representarem nmeros reais, a faixa R
no contnua. Somente uma quantidade limitada de nmeros (2
n
, onde n a quantidade
7-5
total de bits da mantissa e do expoente) pode ser representada. Os nmeros esto ento
dispersos dentro desta faixa.
Os nmeros em ponto flutuante so inerentemente redundantes, no sentido que um mesmo
nmero pode ser representado de mais de uma maneira. Por exemplo, um quintilho pode
ser representado por 1,0.10
18
, ou 0,1.10
19
, ou mesmo 100.10
16
. Assim, desejvel que
exista uma forma normalizada de representar um nmero. Para tanto, utiliza-se somente
mantissas normalizadas. Uma mantissa est normalizada quando constituda somente de
uma parte fracionria (no existe parte inteira) e quando o primeiro dgito a direita da vrgula
diferente de zero. Assim, a forma normalizada de representar um quintilho dada por
0,1.10
19
.
Na base binria, a normalizao da mantissa exige que os seus dois bits mais significativos
sejam diferentes. Assim, para nmeros positivos a mantissa inicia sempre por 0,1
2
. Para
nmeros em complemento de dois, isto implica em que o dgito mais significativo da
mantissa e o bit de sinal sejam diferentes - para nmeros positivos a mantissa inicia ento por
0,1
2
e para nmeros negativos a mantissa inicia por 1,0
2
. Assim, a normalizao restringe a
magnitude |M| de uma mantissa ao intervalo
1/2 |M| < 1
Um nmero no normalizado normalizado facilmente, atravs de deslocamentos da
mantissa para a direita ou esquerda e incrementos ou decrementos do expoente,
respectivamente. Note-se que um eventual estouro de representao na mantissa facilmente
resolvido: basta deslocar a mantissa para a direita, corrigir o bit mais significativo, e somar
um ao expoente. Um estouro de representao no expoente, entretanto, indica um estouro na
capacidade de representao dos nmeros em ponto flutuante. Se o expoente ultrapassou o
maior expoente positivo, fala-se em overflow; se o expoente ultrapassou o menor
negativo, fala-se ento em underflow, e o resultado fornecido normalmente zero.
A representao do nmero zero apresenta algumas caractersticas peculiares, que
influenciam fortemente no formato utilizado para representar nmeros em ponto flutuante em
binrio. A mantissa deve ser naturalmente, igual a zero, mas o expoente pode apresentar
qualquer valor, uma vez que 0.b
e
igual a 0 para todos os valores de b e e. Com isto
tem-se:
1. A mantissa do nmero zero deve apresentar todos os seus bits em zero, para facilitar o
teste por zero. Note-se que isto vai contra a definio formal de uma mantissa
normalizada.
2. O nmero zero na realidade a menor quantidade absoluta possvel de representao.
Durante a realizao de diversos clculos, entretanto, arredondamentos e truncagens
podem levar a resultados que sejam nmeros bem pequenos, mas no exatamente
iguais a zero. Para indicar o fato do zero estar bem prximo em magnitude destes
nmeros, o expoente escolhido para o zero deve ser o maior nmero negativo repre-
sentvel. Assim, por exemplo, se o expoente possuir k bits e for representado em
complemento de dois, o expoente utilizado para o zero dever ser 2
k-1
.
3. Pelas consideraes anteriores, tem-se que o zero representado por 0.b
2
k-1
.
Entretanto, para facilitar o teste de um nmero para verificar se ele igual a zero,
desejvel que o nmero zero seja uma sequncia de bits em zero, sem nenhum bit em
um. Isto est em contradio com a representao acima. Para resolver este problema,
codifica-se o expoente em excesso de 2
k-1
, ou seja, um expoente em zero significa
na realidade a maior magnitude negativa representvel. A codificao em excesso
indica que existe uma quantidade a mais somada ao expoente (no caso, 2
k-1
); para
obter-se o valor real do expoente deve-se subtrair esta quantidade do valor armazenado
no campo de expoente. Ou seja, e
real
= e 2
k-1
. Para um expoente de 8 bits em
complemento de dois, por exemplo, tem-se ento uma codificao em excesso de
128: o expoente 128 representado por 0; o expoente 0 representado por 128; e o
expoente 127 (o maior possvel) dado por 255.
7-6
7. 6 Formatos de nmeros em ponto flutuante
Um nmero em ponto flutuante, representado em binrio, deve fornecer as informaes
relativas mantissa (seu sinal e sua magnitude) e ao expoente (tambm seu sinal e sua
magnitude). Diversas representaes podem ser utilizadas para isto (sinal/magnitude,
complemento de dois, etc). Devido a isto, existem diversos formatos adotados para
representar os nmeros em ponto flutuante. Muitos deles so especficos para uma
determinada famlia de computadores ou para um determinado fabricante.
Por exemplo, o formato da srie S/360-370 da IBM segue o formato comentado abaixo:
o nmero utiliza 32 bits: 1 bit para o sinal da mantissa, 7 bits para o expoente e 24 bits
para o valor da mantissa.
a mantissa representada em sinal magnitude; o expoente representado em excesso-
de-64.
o bit mais significativo representa o sinal da mantissa; os sete bits seguintes
representam o expoente; e os 24 bits menos significativos representam o valor da
mantissa.
a base utilizada a base 16 (hexadecimal).
Assim, o nmero 0,125 x 16
5
tem a seguinte representao:
0 1000101 001000000000000000000000
E o nmero 0,125 x 16
-5
tem a representao:
1 0111011 001000000000000000000000
Note-se que, como a base 16, a mantissa normalizada para dgitos hexadecimais (e no
para dgitos binrios).
O formato recomendado pela IEEE (Institute of Electrical and Electronics Engineers)
descrito a seguir (existem trs formatos: simples, de 32 bits, duplo, de 64 bits e qudruplo,
de 128 bits):
Simples Duplo Qudruplo
Campos:
S = sinal 1 bit 1 bit 1 bit
E = expoente 8 bits 11 bits 15 bits
L = primeiro bit (no representado) (no representado) 1 bit
F = frao 23 bits 52 bits 111 bits
Expoente
Excesso-de 127 1023 16383
Maior valor 255 2047 32767
Menor valor 0 0 0
Tabela 7.4 - Formato IEEE
Nesta notao, cinco grupos diferentes de nmeros podem ser representados: nmeros
normalizados, zero, nmeros no-normalizados, infinito e no-nmeros (NaN):
1. Os nmeros normalizados utilizam um expoente que vai de 1 a 254 (ou 1 a 2046, ou 1
a 32766), o primeiro bit da mantissa (L) sempre zero e por isto no representado. O
valor do nmero calculado por
(1)
s
. 2
E-excesso
. (L.F)
onde L.F representa a mantissa propriamente dita; L o primeiro bit e F a frao.
2. O Zero representado por um nmero todo em zero (E=F=L=0); note-se que o zero
neste caso pode ter sinal.
7-7
3. Nmeros no normalizados possuem o expoente em zero (E=0) e uma frao no zero.
Seu uso restrito para representao do nmeros que no podem ser normalizados
sem causar underflow.
4. O Infinito representado pelo maior valor do expoente (E=255 ou 2047 ou 32767) e
por uma frao em zero (F=L=0). Note-se que o infinito pode ter sinal.
5. No-nmeros (Not a Number) so representados pelo maior expoente e por uma frao
diferente de zero. Seu uso previsto inclui a indicao de cdigos de erro, situaes
imprevistas, etc.
O bit de sinal (S) representado no bit mais significativo; os bits seguintes representam o
expoente. Os bits menos significativos so destinados mantissa. Note-se que o bit L no
representado (exceto na notao qudrupla).
7. 7 Soma e subtrao de nmeros em ponto flutuante
Nmeros em ponto flutuante, para poderem ser somados ou subtrados, devem apresentar o
mesmo expoente. Neste caso, a soma ou subtrao realizada sobre as mantissas. O nmero
resultado formado com a mantissa resultado e o expoente dos operandos.
Como os expoentes devem ser iguais antes de poder-se realizar a operao propriamente dita,
expoentes diferentes devem ser igualados. O menor dos expoentes deve ser tornado igual ao
maior, e a mantissa correspondente a este expoente deve ser convenientemente deslocada
para a direita, de forma que o nmero representado pelo par (mantissa, expoente) no se
altere.
Sejam X e Y dois nmeros em ponto flutuante; sejam X
m
e Y
m
suas mantissas e X
e
e Y
e
os
seus expoentes. As seguintes regras valem ento para a soma (ou subtrao):
1. Se X
e
=Y
e
, ento XY=(X
m
Y
m
) . 2
Xe
2. Se X
e
<Y
e
, ento XY=(X
m
.2
(Xe-Ye)
Y
m
) . 2
Ye
3. Se X
e
>Y
e
, ento XY=(X
m
Y
m
.2
(Ye-Xe)
) . 2
Xe
Por exemplo, no caso 2, a mantissa X
m
associada ao menor expoente X
e
deve ser deslocada
para a direita Y
e
X
e
vezes, para formar uma nova mantissa X
m
.2
(Xe-Ye)
. Esta nova
mantissa, que corresponde agora a um expoente Y
e
, pode ser operada com Y
m
. Note-se que,
quando a mantissa X
m
deslocada para a direita, existe uma perda de preciso nos seus bits
menos significativos, que so eliminados. E se a diferena Y
e
-X
e
for maior que o nmero de
bits utilizados para representar a mantissa, nem necessrio realizar-se a soma (ou
subtrao): todos os bits significativos de X
m
seriam eliminados pelo deslocamento para a
direita (isto equivale a somar dois nmeros, onde um deles muito menor que o outro).
Como os nmeros em ponto flutuante so normalmente armazenados na forma normalizada,
aps a operao a mantissa resultado deve ser normalizada, atravs de deslocamentos para a
esquerda (direita) e decrementos (incrementos) do expoente, tal como explicado na seo 5.
Note-se que um eventual estouro de representao resolvido atravs de um deslocamento
para a direita (exceto no caso em que o expoente j o maior possvel, caso em que
realmente ocorre estouro).
7. 8 Multiplicao de nmeros em ponto flutuante
Nmeros em ponto flutuante so multiplicados facilmente. Basta multiplicar as mantissas e
somar os expoentes. A multiplicao segue essencialmente as mesmas regras da
multiplicao inteira; inclusive a mantissa resultado tem o dobro de bits de comprimento. Ela
7-8
entretanto facilmente reduzida para o nmero normal de bits, atravs da eliminao dos
seus bits menos significativos (por truncagem ou arredondamento).
X x Y = (X
m
x Y
m
) . 2
(Xe+Ye)
Aps a multiplicao o resultado tambm deve ser normalizado; durante este processo pode
ocorrer estouro de representao (se ocorrer estouro na representao do expoente).
7. 9 Diviso de nmeros em ponto flutuante
Nmeros em ponto flutuante so divididos facilmente. Basta dividir as mantissas e subtrair
os expoentes. A mantissa do dividendo inicialmente expandida para o dobro do seu nmero
de bits (pela incluso de zeros a direita) e depois as duas mantissas so divididas pelo mesmo
algoritmo utilizado para nmeros inteiros. Note-se que agora o resto normalmente
desprezado, e as etapas que na diviso inteira corrigiam quociente e resto podem ser
eliminadas.
X Y = (X
m
Y
m
) . 2
(XeYe)
Aps a diviso o resultado tambm deve ser normalizado; durante este processo pode ocorrer
estouro de representao (se ocorrer estouro na representao do expoente).

Vous aimerez peut-être aussi