RepresentaRepresentaçção em Ponto Flutuanteão em Ponto...
Transcript of RepresentaRepresentaçção em Ponto Flutuanteão em Ponto...
Sistemas de Computação
Representação em Ponto FlutuanteRepresentação em Ponto Flutuante
Sistemas de Computação
Representação IEEE para ponto flutuante
• IEEE Standard 754– Estabelecido em 1985 como padrão uniforme para aritmética em ponto
flutuante– A maioria das CPUs suporta este padrão
• Foi projetado para criar um padrão com facilidades para operações numéricas
Sistemas de Computação
Números binários fracionários
• Representação– Bits à direita da “vírgula binária” representam potências fracionárias de 2– Representa o número:
bi bi–1 b2 b1 b0 b–1 b–2 b–3 b–j• • •• • • .124
2i–12i
• • ••••
1/21/41/8
2–j
bk 2k
k j
i
Sistemas de Computação
Exemplos de números binários fracionários
• Valor Representação5-3/4 101.1122-7/8 10.111263/64 0.1111112
• Observações– Divide por 2 deslocando para a direita– Multiplica por 2 deslocando para a esquerda– Números da forma 0.111111…2, logo abaixo de 1.0
• 1/2 + 1/4 + 1/8 + … + 1/2i + … 1.0• Use notação 1.0 –
Sistemas de Computação
Limitação na representação dos números
• Somente números na forma x/2k são representados corretamente
• Outros números possuem representação com bits repetidos
• Valor Representação1/3 0.0101010101[01]…21/5 0.001100110011[0011]…21/10 0.0001100110011[0011]…2
Sistemas de Computação
Representação em ponto flutuante
• Forma numérica– –1s M 2E
• Bit de sinal s determina se o número é negativo ou positivo• O significando M é normalmente um valor fracionário na faixa [1.0,2.0).• O expoente E é um inteiro positivo ou negativo
• Codificação
– MSB é o bit de sinal– O campo exp codifica E– O campo frac codifica M
s exp frac
Sistemas de Computação
Precisão em ponto flutuante
• Tamanhos– Precisão simples: 8 bits para exp, 23 bits para frac
• 32 bits no total– Precisão dupla: 11 bits para exp, 52 bits para frac
• 64 bits no total
• Precisão estendida: 15 bits para exp bits, 63 bits para frac
• Somente em máquinas compatíveis com Intel• 80 bits no total
– 1 bit não utilizado
Sistemas de Computação
Valores numéricos normalizados
• exp 000…0 e exp 111…1
• Representação em excesso de n para expoente E = Exp – Bias
• Exp : inteiro sem sinal representado por exp • Bias : Valor de n
– Precisão simples: 127 (Exp: 1…254, E: -126…127)– Precisão dupla: 1023 (Exp: 1…2046, E: -1022…1023)– Em geral: Bias = 2e-1 - 1, onde e é o número de bits do expoente
• Significando codificado com 1 implícito antes da vírgula
M = 1.xxx…x2• xxx…x: bits do campo frac• Mínimo quando 000…0 (M = 1.0)• Máximo quando 111…1 (M = 2.0 – )
Sistemas de Computação
Exemplo de codificação em ponto flutuante
• ValorFloat F = 15213.0;
– 1521310 = 111011011011012 = 1.11011011011012 213
• SignificandoM = 1.11011011011012frac = 110110110110100000000002
• ExpoenteE = 13Bias = 127Exp = 140 = 100011002
Representação em ponto flutuante Hexa: 4 6 6 D B 4 0 0 Binário: 0100 0110 0110 1101 1011 0100 0000 0000
140: 100 0110 0
15213: 1110 1101 1011 01
Sistemas de Computação
Valores denormalizados
• exp = 000…0
• Valor– Valor do expoente E = –Bias + 1– Valor do significando M = 0.xxx…x2
• xxx…x: bits do campo frac
• Casos– exp = 000…0, frac = 000…0
• Representa o valor 0• Existem duas representações: +0 e –0
– exp = 000…0, frac 000…0
• Números muito perto de 0.0• Quanto menor, maior perda de precisão• “Underflow gradual”
Sistemas de Computação
Valores especiais
• exp = 111…1
• Casos– exp = 111…1, frac = 000…0
• Representa o valor(infinito)• Operações em que ocorrem overflows• Positivo e negativo
• Ex., 1.0/0.0 = 1.0/0.0 = +, 1.0/0.0 = – exp = 111…1, frac 000…0
• Not-a-Number (NaN)• Representa o caso quando não se pode determinar um valor
numérico• Ex., sqrt(–1),
Sistemas de Computação
Visualização da codificação de números reais em ponto flutuante
NaNNaN
+
0
+Denorm +Normalizados-Denorm-Normalizados
+0
Sistemas de Computação
Exemplo de ponto flutuante
• Representação com 8 bits– o bit de sinal é o bit mais significativo– os quatro próximos bits representam o expoente em excesso de 7– os três últimos bits representam o campo frac
• Mesma forma geral do padrão IEEE– normalizado, denormalizado– representação do 0, NaN, infinito
s exp frac02367
Sistemas de Computação
Valores relativos ao expoente
Exp exp E 2E
0 0000 -6 1/64 (denorms)1 0001 -6 1/642 0010 -5 1/323 0011 -4 1/164 0100 -3 1/85 0101 -2 1/46 0110 -1 1/27 0111 0 18 1000 +1 29 1001 +2 410 1010 +3 811 1011 +4 1612 1100 +5 3213 1101 +6 6414 1110 +7 12815 1111 n/a (inf, NaN)
Sistemas de Computação
Faixa de valores
s exp frac E Value
0 0000 000 -6 00 0000 001 -6 1/8*1/64 = 1/5120 0000 010 -6 2/8*1/64 = 2/512…0 0000 110 -6 6/8*1/64 = 6/5120 0000 111 -6 7/8*1/64 = 7/5120 0001 000 -6 8/8*1/64 = 8/5120 0001 001 -6 9/8*1/64 = 9/512…0 0110 110 -1 14/8*1/2 = 14/160 0110 111 -1 15/8*1/2 = 15/160 0111 000 0 8/8*1 = 10 0111 001 0 9/8*1 = 9/80 0111 010 0 10/8*1 = 10/8…0 1110 110 7 14/8*128 = 2240 1110 111 7 15/8*128 = 2400 1111 000 n/a inf
mais perto do zero
maior denormmenor norm
mais perto do 1 para baixomais perto do1 para cima
maior norm
Números denormalizados
Números normalizados
Sistemas de Computação
Distribuição dos valores
• Formato de 6 bits tipo padrão IEEE– e = 3 bits para expoente – f = 2 bits para significando– Excesso de 3
• Distribuição mais densa em direção ao zero.
-15 -10 -5 0 5 10 15
Denormaliz. Normaliz. Infinito-1 -0.5 0 0.5 1
Sistemas de Computação
Números interessantes
• Descrição exp frac Valor numérico
• Zero 00…00 00…00 0.0• Menor Pos. Denorm. 00…00 00…01 2– {23,52} 2– {126,1022}
– Simples 1.4 X 10–45
– Dupla 4.9 X 10–324
• Maior Denorm. 00…00 11…11 (1.0 – ) 2– {126,1022}
– Simples 1.18 X 10–38
– Dupla 2.2 X 10–308
• Menos Pos. Normalizado 00…01 00…00 1.0 2– {126,1022}
– Maior que o maior denormalizado• Um 01…11 00…00 1.0• Maior Normalizado 11…10 11…11 (2.0 – ) 2{127,1023}
– Simples 3.4 1038
– Dupla 1.8 10308
Sistemas de Computação
Propriedades especiais da codificação
• Zero em PF é o mesmo que Zero inteiro– Todos bits = 0
• Pode-se utilizar comparação entre inteiros sem sinal
– Compara bits de sinal– Considera -0 = 0– NaNs são problemáticos
• São maiores que qualquer outro número• Que resposta deve ser dada ?
Sistemas de Computação
Operações em ponto flutuante
• Visão conceitual– Calcula resultado exato– Ajusta resultado para precisão desejada
• Se exponente muito grande, pode ocorrer overflow• Pode ocorrer arredondamento, para ajuste ao tamanho do campo frac
• Modos de arredondamento$1.40 $1.60 $1.50 $2.50 –$1.50
Zero $1 $1 $1 $2 –$1Round down (-) $1 $1 $1 $2 –$2Round up (+) $2 $2 $2 $3 –$1Nearest Even (default) $1 $2 $2 $2 –$2
Sistemas de Computação
Multiplicação em ponto flutuante
• Operandos(–1)s1 M1 2E1 * (–1)s2 M2 2E2
• Resultado(–1)s M 2E
– Sinal: s1 ^ s2– Significando M: M1 * M2– Expoente E: E1 + E2
• Ajustando– Se M 2, desloca M para direita, incrementa E– Se E fora da faixa, overflow – Arredonda M para ajuste ao campo frac
• Implementação– Tarefa mais trabalhosa é multiplicar os significandos
Sistemas de Computação
Soma em ponto flutuante
• Operandos(–1)s1 M1 2E1
(–1)s2 M2 2E2
– Assuma E1 > E2
• Resultado exato(–1)s M 2E
– Sinal s, significando M: • Resultado de alinhamento com sinal & soma
– Expoente E: E1
• Ajuste– Se M 2, desloca M para a direita, incrementa E– Se M < 1, desloca M para a esquerda k posições, decrementa E de k– Overflow se E fora da faixa– Arredonda M para ajuste ao campo frac
(–1)s1 M1
(–1)s2 M2
E1–E2
+
(–1)s M
Sistemas de Computação
Ponto flutuante em C
• C fornece dois níveisfloat precisão simplesdouble precisão dupla
• Conversões– Casting entre int, float, e double modifica valores numéricos– Double ou float para int
• Trunca parte fracionária• Arredonda para zero• Não definido quando estiver fora da faixa
– Geralmente satura para TMin ou TMax– int para double
• Conversão exata, desde que int tenha tamanho de palavra 53 bits– int para float
• Será arredondado de acordo com modo de arredondamento