Buscar

ponto flutuante

Prévia do material em texto

Universidade Federal de Pelotas
Bacharelado em Ciência da Computação
Introdução à Ciência da Computação
Prof. Gerson Cavalheiro
1/4
Apoio 2
Representação de Números em Ponto Flutuante
A representação de números  inteiros  (como  0,  1,  35,  ­617,  313,  25.987,  ­13.500)  pode ser   feita 
facilmente utilizando um conjunto de bits, organizados em bytes. Números ditos reais, ou seja, números que 
possuem uma parte inteira e uma parte fracionária, ambas separadas por vírgulas (como ­1,25 e 38,313) 
requerem   uma   forma   alternativa   de   representação.   Esta   forma   alternativa   de   representação   considera 
diferentes componentes do número. Embora seja comum expressar os números reais apenas com apoio da 
vírgula para separar a parte inteira da parte real, outras visões podem ser consideradas.
Exemplos de representação de números reais
 ­1,25  = ­1,25  * 100  = ­0,125  * 10­1  = ­0,0125  * 10­2
 38,313 = 38,313 * 100  = 0,38313 * 102  = 0,038313 * 103
 3,1416 = 3,1416 * 100  = 0,31416 * 101  = 0,031416 * 102
 82,0   = 82,0   * 100  = 0,82    * 102  = 0,082    * 103
Atenção   à   notação.   Na   notação   brasileira   a   vírgula   é   utilizada   para   separar   a   parte   inteira   da   parte  
fracionária de um número real. O uso do ponto é um facilitador introduzido para auxiliar na visualização do  
valor apresentado. A notação americana também utiliza ponto e vírgula.  No entanto, a notação americana faz  
uso inverso: o ponto separa a parte inteira da fracionária e a vírgula é utilizada para auxiliar na visualização  
do número.
Observe nos exemplos acima que mesmo valores numéricos inteiros podem ser representados como números 
reais. Observe também que é possível criar uma representação genérica para tais números na forma:
+/­ número * base +/­ expoente
A questão  que   se   coloca  é   como criar   uma  representação  deste  valor  numérico   interna   ao  computador 
(utilizando, portanto, uma seqüência de bits/bytes) que seja ao mesmo tempo eficiente em termos de consumo 
de recursos e portável. Uma forma comum é utilizar um conjunto de N bits (tipicamente N = 32 ou 64, para 
representar números em ponto flutuante com precisão simples ou dupla) para armazenar valores em ponto 
flutuante em uma forma normalizada.
Normalizar. Normalizar neste caso significa apresentar o valor assumindo um conjunto de regras padrão, de  
forma que todos os valores tenham a mesma estrutura.
Esta forma normalizada é a seguinte:
+/­ 0,mantissa * base +/­ expoente
onde o número é sempre representado com “0,”, ou seja, a mantissa representa os dígitos significantes do 
número e o expoente regula a precisão da representação.
Exemplos de representação normalizada de números reais
 ­1,25  = ­0,125  * 10­1
 38,313 = 0,38313 * 102
 3,1416 = 0,31416 * 101
 82,0   = 0,82    * 102 
Como os valores devem ser representados em uma seqüência de N bits, a configuração se dá da seguinte 
forma:
SN SE Expoente Mantissa
N bits: x bits para o Expoente, y bits para a Mantissa
onde:
Universidade Federal de Pelotas
Bacharelado em Ciência da Computação
Introdução à Ciência da Computação
Prof. Gerson Cavalheiro
2/4
• SN é o sinal do número (+/­): 1 bit
• SE é o sinal do expoente (+/­): 1 bit
• Expoente é o valor numérico do expoente do número normalizado: x bits
• Mantissa é o valor numérico dos dígitos significativos do número normalizado: y bits
• N = 1 + 1 + x + y
Deve­se observar que nesta representação a base não é  apresentada.  Isto é  evidente uma vez que toda a 
representação interna se dá utilizando a base numérica binária. Portanto, a base é 2. Desta forma, pode se 
afirmar que, considerando­se a representação acima, existem os seguintes limites de valores:
• O maior expoente possível é: 2x ­ 1
• A maior mantissa possível é 2y ­ 1
• O maior número real representável é +(0.111...1 x 2E), sendo E = 2x ­ 1
• O menor número real é ­(0.111...1 x 2E), sendo E = 2x ­ 1
• O menor real positivo é +(0.100...0 x 2 ­E), sendo E = 2x ­ 1
• O maior real negativo é ­(0.100...0 x 2 –E), sendo E = 2x ­ 1
Esta faixa de valores representa também o alcance e a precisão da representação. O alcance diz respeito ao 
número de bits ocupados para armazenar o expoente: quanto maior for o número de bits para o expoente, 
maior   espectro   de   alcance   do   número.  A   precisão   está   relacionada   ao   número   de   bits   alocados   para 
representar a mantissa: quanto maior o número de bits utilizado, maior o número de dígitos significativos que 
podem ser armazenados. Dependendo do número de bits nos dois casos, podem ocorrer situações de overflow 
e underflow.
Overflow. Termo corrente na computação  para designar que um valor não  pode ser representado pois seu  
valor excede a capacidade de armazenamento disponível.
Underflow. Termo corrente na computação para designar que um valor não pode ser representado pois está  
contido entre 0 e o menor valor real normalizado representável.
Overflow  ocorre quando o valor do expoente não pode ser armazenado no número de bits reservados ao 
expoente. Não importa se este valor for positivo ou negativo. Já a situação de underflow é mais pitoresca: ela 
ocorre   quando  o  número   a   ser   representado  é  maior   que  0   (zero)  mas  é  menor   que  o  menor   número 
representável.  Assim,  por  maior  que   seja  o  expoente,  ocorre  uma descontinuidade na   representação dos 
números na faixa de números próximas a 0 (zero).
Note que imprecisão é diferente de  underflow. Enquanto valores numéricos muito próximos a 0 (zero) não 
podem ser representados, a limitação do número de bits para mantissa incorre em perda de precisão do valor 
efetivo, sendo armazenado um valor aproximado (portanto impreciso) do valor correto.
Assim, pode­se considerar que a  retirada de um bit  da representação do expoente para  representação da 
mantissa  aumenta  a  precisão de representação,  pois  diminui  o  “passo” de representação do número.  No 
entanto, a perda de um bit no expoente implica na diminuição da faixa de valores representável.
Representação IEEE 754
O padrão de número 754 definido pelo Institute of Electrical and Electronics Engineers, também conhecido 
como norma IEEE 754, é empregado para representação de números em ponto flutuante em computadores. 
Este padrão foi definido em 1985 e é atualmente empregado na maioria dos processadores. A norma define 
como devem ser representados números em ponto flutuante com precisão simples (utilizando 32 bits) e com 
precisão dupla (64 bits). Em ambos os casos, a representação requer uma normalização do número com parte 
Universidade Federal de Pelotas
Bacharelado em Ciência da Computação
Introdução à Ciência da Computação
Prof. Gerson Cavalheiro
3/4
fracionária. A padronização é um importante recurso para unificar a representação de dados em diferentes 
máquinas, permitindo a comunicação de dados entre elas.
O formato de representação no padrão IEEE 754 é dado por:
S exp frac
1 bit de sinal
x bits para o expoente
y bits para os dígitos de valor
onde:
• para precisão simples: x = 8 e y = 23 
• para precisão dupla: x = 11 e y = 52
A representação neste padrão apresenta algumas diferenças em relação à forma apresentada anteriormente.
● O expoente. Observe que não é armazenado o sinal do expoente. O valor do expoente, pelo padrão 
IEEE 754 é armazenado pela notação com peso, também chamada de notação por excesso de valor. 
Nesta notação, o valor mais negativo que o expoente pode assumir é representado por 0 (zero). Assim 
temos que, com precisão simples, os limites dos valores são dados por excesso de 127 e em precisão 
dupla por excesso de 1023.
Exemplo de expoente para precisão simples:
● Expoente ­1:     ­1 + 12710 = 12610 = 0111 11102
● Expoente +1:     +1 + 12710 = 12810 = 1000 00002
● A mantissa.  A mantissa é  armazenadano sentido “da esquerda para a  direita”,  ou seja:  .  Esta 
mantissa  é   armazenada na  forma normalizada,  de   forma que o primeiro bit  em 1  (um)  ocorra à 
esquerda da vírgula. Este bit em 1 (um) não é armazenado, ficando subentendido.
Exemplo de normalização da mantissa para precisão simples:
● Mantissa 0,1310:     0,11012  = 1,1012   * 2­1
● Mantissa 5,1010:     101,1012 = 1,011012 * 22
Os dígitos na mantissa são representados por m1, m2,  m3, ... my  (lembrando, da esquerda para a direita), assim, 
o valor do número é então dado por:
(­1)S * (1 + (m1 * 2
­1) + (m2 * 2
­2) + (m3 * 2
­3) +… (my * 2
­y)) * 2(expoente­PESO)
ou, de forma genérica (na precisão simples, com PESO = 127):
(­1)S * (1 + mantissa) * 2(expoente­127)
Exercícios:
1. Pesquise:
  a) limite máximo e mínimo para o expoente em precisão simples.
b) limite máximo e mínimo para o expoente em precisão dupla.
2. Mostre a representação binária do número ­0,7510 nas precisões simples e dupla no padrão IEEE 754.
3. Qual número decimal real é expresso pela seguinte palavra?
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 0 8 7 6 5 4 3 2 1 0
1 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Universidade Federal de Pelotas
Bacharelado em Ciência da Computação
Introdução à Ciência da Computação
Prof. Gerson Cavalheiro
4/4
Respostas:
1. Pesquise:
  a) limite máximo e mínimo para o expoente em precisão simples: ± 2­126 to (2­2­23)×2127
b) limite máximo e mínimo para o expoente em precisão dupla.: ± 2­1022 to (2­2­52)×21023
2. Mostre a representação binária do número ­0,7510 nas precisões simples e dupla no padrão IEEE 754.
● ­0,75 pode ser representado como ­3/4 ou ­3/22
● Em binário corresponde à: ­112/102 ou ­0,112 
● Em notação científica na base 2:  ­0,112 
● Em notação científica normalizada na base 2:  ­1,12 * 2­1
      Como a representação genérica de um número em ponto flutuante (em precisão simples) é;
(­1)S * (1 + mantissa) * 2(expoente­127)
● Como o valor com que a base deve ser elevada deve ser  ­1, o expoente em questão é 126, para que (126­127) resulte em ­1.
● Como a mantissa normalizada é ­1,12, o valor binário é 12 + 0,100000000000000000000002 
● Portanto, em precisão simples:
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 0 8 7 6 5 4 3 2 1 0
1 0 1 1 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
● E em precisão dupla (com 52 zeros!):
(­1)S * (1 + 0,100...00) * 2(1022­1023)
● Ou seja:
63 61 62 61 60 59 58 57 56 55 54 53 52 51 50 ... ... ... 2 1 0
1 0 1 1 1 1 1 1 1 1 1 0 1 0 0 0 0 0 ... ... ... 0 0 0 0 0 0 0 0
3.Qual número decimal real é expresso pela seguinte palavra?
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 0 8 7 6 5 4 3 2 1 0
1 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 
● O sinal 1, portanto o número é negativo.
● O campo de expoente possui 100000012, que corresponde a 129.
● A mantissa é dado por 1 * 2­2, portanto ¼, ou seja, 0,25.
● Utilizando a equação básica:
(­1)S * (1 + mantissa) * 2(expoente­127)
● Temos que:
(­1)1 * (1 + 0,25) * 2(129­127)
● Portanto o valor armazenado é ­1*1,25*22 = ­1*1,25 * 4 = 5,0

Continue navegando