REPRESENTAÇÃO DE NÚMEROS REAIS
Até agora, passamos por cima de alguns outros problemas. Os dados numéricos podem ser fracionários (tais como 57,683). Como representar essa parte fracionária (após a vírgula que a separa da parte inteira), de forma que permita processamento eficiente e armazenamento com pouco consumo de memória? Vamos analisar esses problemas logo à frente.
NÚMEROS REAIS
Números reais são aqueles com parte fracionária (por exemplo, 57,683). Estamos acostumados a representar esses números no formato parte inteira, vírgula (ou ponto), parte fracionária:
Esta representação, embora cômoda para cálculos no papel, não é adequada para processamento no computador.
REPRESENTAÇÃO EM PONTO FLUTUANTE
Consideremos o número 57,683 usado acima como exemplo. Este número pode ser também expresso como 57,683 x 100. E também poderia ser expresso com 57683 x 10-3 ou ainda 0,57683 x 102. Na realidade, qualquer número - inteiro ou fracionário - pode ser expresso neste formato número x base expoente, em que variamos duas coisas: a posição da vírgula (que delimita a parte fracionária) e a potência à qual elevamos a base. Essa representação é denominada representação em ponto flutuante, pois o ponto varia sua posição, modificando, em conseqüência, o valor representado.
REPRESENTAÇÃO NORMALIZADA
Na representação normalizada, o número é preparado movendo a vírgula para a direita ou para a esquerda de forma que o número seja menor que 1, o mais próximo possível de 1, obviamente multiplicado por uma potência da base de forma a manter o valor do número. Em geral, isso significa que o primeiro dígito significativo seguirá imediatamente ao ponto (ou vírgula).
Por exemplo:
57,68310 --> normalizando ==> 0,57683 x 102
0,000462810 --> normalizando ==> 0,4628 x 10-3
0,000010112 --> normalizando ==> 0,1011 x 2-4
De forma genérica, podemos representar a forma normalizada:
± número x base ±expoente
A parte do número representado dessa forma normalizada (os algarismos significativos), damos o nome de mantissa.e portanto podemos representar:
± 0,M x B ± e
onde M é a mantissa, B é a base e e é o expoente.
REPRESENTAÇÃO DE NÚMEROS REAIS NO COMPUTADOR
Uma forma comum de representação de números reais no computador pode ser expressa como segue:
Pode-se notar que a base não é expressa. Como a base, para cada computador, será sempre a mesma, não há necessidade de apresentar a base na representação (no exemplo, a base é 2). Dizemos que a base é implícita.
Para cada computador, o número total M de bits para a representação, o número de bits para SN (sinal do número), para SE (sinal do expoente), para a mantissa e para o expoente, são pré-definidos em projeto.
Assim, podemos concluir que, quanto maior o número de bits para o expoente, maior será a faixa de números que o computador pode representar (maior alcance); e quanto maior o número de bits para a mantissa, maior a precisão da representação. Porém, reduzindo-se a mantissa, perde-se precisão e há maior a necessidade de truncar o número (truncar um número é cortar algarismos significativos que não podem ser representados).
Considerando-se a representação acima, na base implícita 2:
maior expoente possível E: 2x - 1
maior mantissa possível: 2y - 1
maior número real: +(0.111...1 x 2E) sendo E = 2x - 1
menor número real: -(0.111...1 x 2E) sendo E = 2x - 1
menor real positivo: +(0.100...0 x 2 -E sendo E = 2x - 1
maior real negativo: -(0.100...0 x 2 -E sendo E = 2x - 1
FAIXA DE REPRESENTAÇÃO
Como vimos anteriormente, a representação em ponto flutuante tem limites de alcance e de precisão. O alcance é limitado pelo número de bits do expoente. A precisão é determinada pelo número de bits da mantissa.
Ocorre overflow quando o valor absoluto do dado a ser representado excede a capacidade de representação, porque o número de bits do expoente (neste caso, positivo) é insuficiente para representar o dado.
Um outro problema ocorre na região de números próximos de zero, que tem o maior expoente negativo possível. Ocorre underflow quando o valor absoluto do dado a ser representado é tão pequeno que fica menor que o menor valor absoluto representável. Nesse caso, o expoente é negativo mas não representa os números muito próximos de zero e ocorre uma descontinuidade na representação, com os números próximos a zero não sendo representados.
Underflow não é o mesmo que imprecisão. Dados na faixa de underflow não podem ser representados, ocorrendo estouro no expoente. No caso de imprecisão, a normalização permite que o dado seja representado, porém com perda de precisão.
CARACTERÍSTICA
Característica é o expoente, representado na forma de excesso de n, ou seja,
CARACTERÍSTICA = EXPOENTE + EXCESSO
A representação substituindo expoente por característica acarreta que todas as características serão positivas, de forma que é possível eliminar a representação do sinal do expoente.
Se CARACTERÍSTICA = EXPOENTE + EXCESSO,
sendo M o número de bits para a representação da característica, temos:
0 = - 2M-1 + EXCESSO logo: EXCESSO = + 2M-1
EXEMPLO DE REPRESENTAÇÃO EM PONTO FLUTUANTE
a) Representação no IBM /370
A família IBM /370 representa os dados em ponto flutuante com base implícita = 16, no seguinte formato:
sendo
SN = sinal do dado
CARACTERÍSTICA = o expoente, representado na forma de excesso de n, ou seja,
CARACTERÍSTICA = EXPOENTE + EXCESSO
No caso da IBM, o excesso é de 6410, portanto: CARACTERÍSTICA = EXPOENTE + 6410
Exemplificando: expoente = 810, logo característica = 810 + 6410 = 7210
Assim, uma característica entre 0 e 6310 significa que o expoente é negativo, enquanto uma característica entre 65 e 127 significa que o expoente é positivo (característica igual a 6410 significa expoente igual a 0)..
Exemplo: Representar 25,510
Como a base implícita é 16, vamos converter para hexadecimal: 25 / 16 = 1, resto 9 logo: 2510 = 1916
Parte fracionária: 0.5 x 16 = 8,0
Logo: 25,510 = 19,816 x 160
Normalizando: 19,816 x 160 = 0,19816 x 162. Em binário com 24 bits, a mantissa normalizada será:
0,19816 = 0001.1001.1000.0000.0000.0000
Obs.: Como o número 0,19816 será representado em 24 bits, os bits não representativos (à direita) serão preenchidos com zeros.
Como o expoente é 2, a característica será: 210 + 6410 = 6610. Em binário com 7 bits, será: 100.0010
Portanto, a representação será:
b) Representação no PDP 11
Os microcomputadores PDP 11 representam os dados em ponto flutuante com base implícita = 2, no seguinte formato:
sendo
SN = sinal do dado
CARACTERÍSTICA = o expoente, representado na forma de excesso de n, ou seja,
CARACTERÍSTICA = EXPOENTE + EXCESSO
No caso do PDP 11, o excesso é de 12810, portanto: CARACTERÍSTICA = EXPOENTE + 12810
Exemplificando: expoente = - 28 logo característica = - 2810 + 12810 = 10010
Assim, uma característica entre 0 e 12710 significa que o expoente é negativo, enquanto uma característica entre 129 e 255 significa que o expoente é positivo (característica igual a 1280 significa expoente igual a 0).
Exemplo: Representar 25,510
Como a base implícita é 2, vamos converter para binário: 2510 = 110012
Parte fracionária: 0.5 x 2 = 1,0
Logo: 25,510 = 11001,12 x 20
Normalizando: 11001,12 x 20 = 0,1100112 x 25.
Obs.: Como a base implícita no PDP 11 é 2, o número normalizado começará SEMPRE por 0,1. Assim, como o primeiro dígito da mantissa será sempre 1, o PDP 11 economiza um bit na mantissa não armazenando o primeiro bit da mantissa, já que está implícito que todos os números terão mantissa iniciando com 1. O bit economizado dessa forma permite que, embora a mantissa no PDP seja representada com 23 bits e no IBM /370 com 24 bits, a precisão na representação é a mesma.
Obs.1: Leia-se o SEMPRE da obs. acima como quase sempre. A única exceção corre por conta do zero, que nesse caso tem um tratamento especial.
Em binário com 23 bits, a mantissa normalizada será (lembrando que o primeiro bit 1 não é representado):
0,1100112 = 100.1100.0000.0000.0000.0000
Obs.: Como o número 0,1100112 será representado em 23 bits, os bits não representativos (à direita) serão preenchidos com zeros.
Como o expoente é 5, a característica será: 510 + 12810 = 13310. Em binário com 8 bits, será: 1000.0101
Portanto, a representação será:
Exercício: Qual das representações de ponto flutuante nos dois computadores exemplificados acima tem o maior alcance?
Resp.: O alcance de uma representação depende do valor da base implícita, elevado ao maior valor que a característica pode assumir.
O maior alcance será o que tiver o maior valor de Be ou seja, base elevada ao maior valor possível da característica.
O IBM /370 tem 7 bits para característica (maior característica = 63) e base implícita 16, portanto 1663 = (24) 63 = 2252
O PDP tem 8 bits para característica (maior característica = 127) e base implícita 2, portanto 2127
Conclusão: A representação em ponto flutuante do IBM /370 tem maior alcance que a do PDP 11.