Upload
others
View
5
Download
0
Embed Size (px)
Citation preview
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