Introdução à Programação
Prof. Carlos Andrés Ferrero
Armazenamento de Números em
Ponto Flutuante
Números em Ponto Flutuante
•
Um Número Real possui:
– Uma parte inteira e– Uma parte fracionária
•
Por ex. o valor (122,324) possui:
– Parte inteira: 122Números em Ponto Flutuante
•
Ao tentarmos usar uma representação com ponto
(vírgula) fixo, teríamos que fixar um número de
bits à direita e outro à esquerda.
– Suponha que o computador conseguisse armazenar números do sistema decimal de 8 algarismos, sendo 5 para a parte inteira e 3 para a parte fracionária;
– Por ex. (178,12)10
𝑆5 𝑆3 𝑆2 𝑆1 𝑆0 . 𝑆−1 𝑆−2 𝑆−3
Decimal 1 7 8 . 1 2
Números em Ponto Flutuante
•
Ao tentarmos usar uma representação com ponto
(vírgula) fixo, teríamos que fixar um número de
bits à direita e outro à esquerda.
– Suponha que o computador conseguisse armazenar números do sistema decimal de 8 algarismos, sendo 5 para a parte inteira e 3 para a parte fracionária;
– Por ex. 212178,12 10
𝑆5 𝑆3 𝑆2 𝑆1 𝑆0 . 𝑆−1 𝑆−2 𝑆−3
Decimal 1 7 8 . 1 2
Números em Ponto Flutuante
•
Ao tentarmos usar uma representação com ponto
(vírgula) fixo, teríamos que fixar um número de
bits à direita e outro à esquerda.
– Suponha que o computador conseguisse armazenar números do sistema decimal de 8 algarismos, sendo 5 para a parte inteira e 3 para a parte fracionária;
– Por ex. 178,1296 10
– Não pode ser representado! Faltou um algarismo. 𝑆5 𝑆3 𝑆2 𝑆1 𝑆0 . 𝑆−1 𝑆−2 𝑆−3
Decimal 1 7 8 . 1 2
Números em Ponto Flutuante
• O problema de fixarmos um ponto (vírgula) é que temos que limitar ambos os lados, os quais podem ou não ser utilizados
• Assim, além de um problema de limite de representação, haveria um problema de desperdício de memória
Números em Ponto Flutuante
• Para isso temos que lembrar da notação científica no sistema decimal
• Ex.: mostre o número 7500 em notação científica
– 7,5 × 103, pois movendo vírgula 3 posições à direita forma o
valor do enunciado, 7500
• Ex.: mostre o número 7425000000000
Números em Ponto Flutuante
• Para isso temos que lembrar da notação científica no sistema decimal
• Ex.: mostre o número 0,00541 em notação científica
– 5,41 × 10−3, pois movendo a vírgula 3 posições à esquerda
obtemos o valor 0,00541
• Ex. 19: mostre o número - 0,0000000000000232
– −2,32 × 10−14, pois deslocando 14 posições à esquerda
Números em Ponto Flutuante
• Para o sistema binário funciona muito parecido:
• Ex.: mostre o número 10101012 em notação científica
– 1,010101 × 26, pois movendo a vírgula 6 posições à direita
obtemos o valor 10101012
• Ex. 21: mostre o número −0,0000011101110012
– −1,110111001 × 2−6, pois deslocando 6 posições à esquerda
obtemos o valor do enunciado
Números em Ponto Flutuante
• Uma vez feita a Normalização devemos identificar três componentes
– Sinal: podendo ser representado por apenas um bit (0 ou 1)
– Expoente: define o deslocamento da vírgula
– Mantissa: parte fracionária do número, em que a vírgula fica implícita à esquerda
• Ex.: o valor 10101012 possui as seguintes componentes
+ 26 × 1,010101
Números em Ponto Flutuante
• Uma vez feita a Normalização devemos identificar três componentes
– Sinal: podendo ser representado por apenas um bit (0 ou 1)
– Expoente: define o deslocamento da vírgula
– Mantissa: parte fracionária do número, em que a vírgula fica implícita à esquerda
• Ex.: o valor −0,0000011101110012 possui as seguintes componentes
- 2−6 × 1,110111001
Números em Ponto Flutuante
•
Padrão IEEE 754-2011
– SinalRepresentado por um bit, sendo
– Zero (0) para positivo
– Um (1) para negativo
– Expoente
Representado em Sistema Excesso (a ser visto em breve)
Números em Ponto Flutuante
•
Sistema em Excesso
– O complemento de 2, para 4 bits, representa valores de -8 até 7
– O sistema excesso, para 4 bits, permitirá representar valores de -7 a 8
•
Consiste em somar
(2
𝑚−1−1
) ao valor que
queremos representar
Números em Ponto Flutuante
•
Consiste em somar
(2
𝑚−1−1)
ao valor que
queremos representar
– Ex.: representar o valor 6 em sistema de excesso com 4 bits de armazenamento (chamado de Excesso_7)
• m = 4
• Resultado = 6 + (2𝑚−1−1) = 6 + 7 = 1310
• Binário em excesso: 11012
– Ex.: na mesma memória representar o valor -7
Números em Ponto Flutuante
•
Represente o valor
5,75
10em ponto flutuante de
32 bits (precisão simples) de acordo com a norma
IEEE 754-2011
– Sinal: 1 bit
– Excesso: 8 bits (excesso_127)
– Mantissa: 23 bits (inteiro sem sinal)
Números em Ponto Flutuante
•
Transformação do valor
5,75
10Números em Ponto Flutuante
•
Transformação do valor
5,75
102. Mude o número para binário
• Parte inteira: 1012
• Parte fracionária: 0,112
• Resultado em binário: 101,112
Números em Ponto Flutuante
•
Transformação do valor
5,75
102. Mude o número para binário
• Parte inteira: 1012
• Parte fracionária: 0,112
• Resultado em binário: 101,112
3. Normalize
Números em Ponto Flutuante
•
Transformação do valor
5,75
104. Encontre os valores de Expoente e Mantissa
• O expoente 2 deve ser representado em Excesso_127
– Resultado: 2 + 127 = 129
– Em binário: 10000001
Números em Ponto Flutuante
•
Transformação do valor
5,75
104. Encontre os valores de Expoente e Mantissa
• A mantissa deve ser representada como inteiro sem sinal
Números em Ponto Flutuante
•
Transformação do valor
5,75
104. Encontre os valores de Expoente e Mantissa
• A mantissa deve ser representada como inteiro sem sinal
– Resultado: 0111
• Completar com zeros à direita da mantissa
Números em Ponto Flutuante
•
Mostre o valor
–
10,1
10usando precisão simples
1. Sinal negativo: valor 1
2. Número em binário: 1010,0 0011
3. Normalização: 1,0100 0011 × 23
4. Componentes:
• Expoente em Excesso_127: 3 + 127 = 130 = 10000010
• Mantissa: 010000110011001100110011 (24 bits)
Números em Ponto Flutuante
•
Mostre o valor
–
10,1
10usando precisão simples
1. Sinal negativo: valor 1
2. Número em binário: 1010,0 0011
3. Normalização: 1,0100 0011 × 23
4. Componentes:
• Expoente em Excesso_127: 3 + 127 = 130 = 10000010
• Mantissa: 010000110011001100110011 (24 bits)
• Reduzindo para 23 bits: 01000011001100110011010
•
Resultado
•
Ferramentas para conversão online
– IEEE 754 ConverterExercícios
•
Converter os seguintes valores para Compl 2.
usando 16 bits.
154310
-14310
-102410
Exercícios
•
Converter os seguintes números reais para ponto
flutuante de precisão simples (32 bits) conforme
norma IEEE 754-2011
-1010
29610
1200,312510