Buscar

Números Reais Ponto Fixo e Ponto Flutuante - Organização de Computadores

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

Números fracionários
Abordagem usando ponto fixo e ponto flutuante
problema
Temos em nossos computadores uma unidade chamada de memória que tem como objetivo armazenar dados que serão usados pelo processador.
A memória dos computadores é limitada, portanto, possuem uma capacidade máxima de dados que podem ser armazenados.
Para aumentar a quantidade de informações que podem ser guardadas, é usada uma quantidade limitada de bits para armazenar os diferentes tipos de dados suportados. Consequência: existem valores que não podem ser extrapolados (limites superior e inferior).
Como, então, armazenar números reais, que podem conter uma quantidade muito grande ou até mesmo infinita de dígitos?
Ponto fixo
Ponto fixo
Ponto fixo - representação
Para evitar problemas na hora de realizar operações aritméticas, deve-se seguir a representação decimal para ambos operandos: R = (N, M), sendo N o total de bits (considera também após o ponto) e M a quantidade de bits após o ponto.
Números com representação (8, 3) podem ser expressos assim: 10101.010
Portanto, fica fácil realizar operações com a mesma representação (15,3) + (15,3), (10,2) - (10,2), etc.
O nome Ponto Fixo vem dessa definição de representação.
Ponto fixo – aritmética 
As operações aritméticas básicas com ponto fixo funcionam da mesma forma que sem ele, porém, deve haver o mesmo número de bits (mesma representação) após a vírgula. 
a.b + a.b
 010011.01101			 010011.01101
+ 01001100.110		 + 001100.11000
Ponto fixo – aritmética
Calcule:
 10.0101 (2, 3125)			11.1001 (3, 5625)
+ 01.1101 (1,8125)		 - 10.1101 (2,8125)
 ______	 				______
 4,125			 	 0,75
Ponto fixo - arredondamento
Devido ao uso de quantidade fixa de bits, por vezes precisamos realizar operações com números que ultrapassam a quantidade fixada, para tal, usamos um arrendodamento de valores.
1.285349 = 1.28535 (9)
1.285349 = 1.2853 (49)
1.285349 = 1.285 (349)
1.285349 = 1.29 (5349)
Ponto fixo - Problema
Ponto flutuante
Existe uma estratégia diferente da usada pelo ponto fixo para armazenamento de números reais.
Nessa estratégia não é usada uma representação fixa para números fracionários, portanto, ficou conhecida como Ponto Flutuante. 
A norma IEEE 754 determina um padrão para projetistas de computadores usarem uma mesma forma de organização de seus números em ponto flutuante. Essa norma é o padrão mais usado para uso de números reais pelos computadores, o que inclui os processadores da Intel, AMD, Macintoshes, entre outros. Chegaremos em seus detalhes adiante.
Ponto flutuante x ponto fixo
A representação usando Ponto Fixo possui uma janela fixa de valores que podemos representar, e quanto maior a precisão necessária menor os valores que podem ser representados, além de haver uma grande perca de precisão em alguns cenários.
Por outro lado, o Ponto Flutuante possui uma janela variável de valores que podem ser representados, o que permite que possamos usar números como 10000000000000000000,0 e 0,0000000000000000001 com facilidade, algo que a representação fixa [R(N,M)] necessária para o uso do Ponto Fixo não permitiria sem o uso de muita memória (N e M seriam muito grande):
PontoFlutuante
Ponto Fixo
10000000000000000000,0
10000000000000000000,00000000000000000000
0,00000000000000000001
00000000000000000000,00000000000000000001
Ponto flutuante
Ponto flutuante - organização
Ponto flutuante - organização - IEEE 754
O IEEE (Instituto de Engenheiros, Eletricistas e Eletrônicos) é uma organização profissional sem fins lucrativos fundada nos Estados Unidos, possuem como meta difundir conhecimento técnico e promover padrões a serem usados por todos.
A norma IEEE 754 define como os pontos flutuantes devem ser tratados pelos processadores.
Antes dessa norma ser criada cada projetista fazia de sua própria forma.
Tratar números em ponto flutuante não é tão simples, o que induzia alguns projetistas a errarem em pequenos detalhes.
Ponto flutuante - organização - IEEE 754
Foram definidos dois tipos diferentes de ponto flutuante: precisão simples e precisão dupla.
Precisão Simples (float, 32 bits):
Precisão Dupla (double, 64 bits):
Ponto flutuante - IEEE 754 – Bit de sinal 
O bit de sinal é usado de forma similar ao sinal magnitude: 0 é usado para indicar que um número positivo e 1 para indicar um número negativo. 
Ponto flutuante - IEEE 754 – Expoênte
São reservados 8 (precisão simples) ou 11 (precisão dupla) bits para armazenamento do expoênte.
Precisamos armazenar expoêntes positivos e negativos: é usada a estratégia de excesso de 127 (simples) ou excesso de 1023 (dupla).
Um expoente em precisão simples com 8 bits com valor um representaria o valor 128: (255 – 127).
Um expoente em precisão simples com 8 bits com valor zero representaria o valor -127: (0 – 127).
Um expoente em precisão dupla com o valor 10101010101 (11 bits) representaria o valor 215: 
(1365 – 1023).
Ponto flutuante - IEEE 754 – Expoênte
O maior valor de um expoênte em precisão dupla poderia ser de 1024 e o menor valor poderia ser de -1023, mas não é o que acontece na prática, pois valores com todos os bits 1 ou todos os bits 0 são reservados para números especiais.
Conclusão: o maior valor real para o expoênte é seu valor de excesso (positivo) e o menor valor é seu valor de excesso de forma negativa + 1. Ex.: +127 ou -126 (-127 + 1) para precisão simples e +1023 ou -1022 para precisão dupla.
A base do expoênte para números binários é sempre 2, portanto, não precisa ser armazenada (é implicita).
Ponto flutuante - IEEE 754 – MANTISSA
Ponto flutuante - IEEE 754 – MANTISSA - Normalização
Ponto flutuante – valores especiais
Ponto flutuante - IEEE 754 – faixa de valores
Ponto flutuante – operações e resultados
Operação
Resultado
n ÷ ±∞
0
±∞ × ±∞
±∞
±não-zero ÷ ±0
±∞
±finito × ±∞
±∞
∞ + ∞
∞ − −∞
+∞
−∞ − ∞
−∞ + −∞
−∞
∞ − ∞
−∞ + ∞
NaN
±0 ÷±0
NaN
±∞ ÷ ±∞
NaN
±∞ × 0
NaN
Ponto flutuante - IEEE 754 – RESumindo...
O sinal do valor é dado através do uso de um bit de Sinal Magnitude, sendo 0 positivo e 1 negativo.
O expoênte está sempre em base 2, sendo essa base implicita (não armazenada).
O expoênte é armazenado em excesso de 127 (-127) para precisão simples ou 1023 (-1023) para precisão dupla.
O primeiro bit da mantissa é sempre 1 e não é armazenado (é implicito), sendo sempre mantida como 1.f, sendo f o valor realmente armazenado.
Ponto flutuante – convertendo para base decimal
Converta C4D5B600 em Ponto Flutuante (precisão simples) seguindo a norma IEEE 754 para base decimal.
C4D5B600 = 11000100110101011011011000000000
Forma IEEE 754 precisão simples: 1_10001001_10101011011011000000000
Sinal = 1 = Negativo
Expoênte = 10001001 = 137 - 127 = 10
Mantissa (com bit implicito) = 1.10101011011011000000000
Relizando 10 deslocamentos à esquerda na mantissa (expoênte é +10):
Mantissa = 11010101101.1011000000000
Parte inteira da Mantissa após deslocamento = 11010101101 = 1709
Parte fracionária da Mantissa após deslocamento = 1011 = 0.6875
Colocando tudo junto: -1709.6875
Ponto flutuante – convertendo para base decimal
3ED80000 = 0011_1110_1101_1000_0000_0000_0000_0000
Forma IEEE 754 precisão dupla: 0_01111101_10110000000000000000000
Sinal = 0 = Positivo
Expoênte = 01111101 = 125 - 127 = -2
Mantissa (com bit implicito) = 1.10110000000000000000000
Realizando 2 deslocamentos à direita na mantissa (expoênte é -2):
Mantissa = 0.0110110000000000000000000
Parte inteira da Mantissa após deslocamento = 0
Parte fracionária da Mantissa após deslocamento = 0.011011 = 0.421875
Colocando tudo junto = 0 + 0.421875 = 0.421875
Ponto flutuante – operações aritméticas
Ponto flutuante – operações aritméticas
Algumas comparações de tempo gasto em operações aritméticas tomando como base uma adição com inteiros.
Adição com inteiro – 1t.
Adição com ponto flutuante – 4t.
Multiplicação com ponto flutuante – 6t.
Divisão com ponto flutuante – 13t.
Há um método mais rápido (mesmo tempo que a multiplicação) para divisão de números em ponto flutuante: Método da Aproximação Recíproca. Entretanto, esse método costuma entregar resultados imprecisos.

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais