Sei sulla pagina 1di 3

Conceitos gerais de ponto flutuante

muito importante entender que qualquer sistema de ponto flutuante binrio pode
representar apenas um nmero finito de valores de ponto flutuante na forma exata.
Alm disso, tenha em mente que os nmeros podem ser representados em IEEE
ficam espalhados por uma variedade muito grande.
O objetivo do padro IEEE, que projetado para clculos de engenharia,
maximizar a preciso (para obter mais prximo possvel para o valor real do
nmero).

Detalhes do IEEE
Nmeros de ponto flutuante so representados no seguinte formato, onde
[expoente] o expoente binrio:
X = Fraction * 2^(exponent - bias)

[Frao] a parte fracionria normalizada o nmero normalizado como o expoente


ajustado para que o bit esquerda sempre 1.
[bias] o valor de ajuste usado para evitar a necessidade de armazenar expoentes
negativos.
O bias para nmeros de preciso simples 127 e 1023 (decimal) para nmeros de
preciso dupla.
Os valores so iguais para todos 0 e 1s (binrio) so reservados para representar
casos especiais.

Exemplos de preciso nica


2 = 1 * 2 ^ 1 = 0100 0000 0000 0000... 0000 0000 = 4000 0000 hex
Observe o bit de sinal zero e o expoente armazenado 128 ou 100 0000 0 em
binrio, que de 127 mais 1. Mantissa armazenado (1) 000 0000... 0000 0000,
que tem um implcito lder binrio e 1 ponto, portanto mantissa real 1.
-2 = -1 * 2 ^ 1 = 1100 0000 0000 0000... 0000 0000 = hex do C000 0000
Mesmo como + 2, exceto que o bit de sinal definido. Isso verdadeiro para todos
os nmeros de ponto flutuante do formato IEEE.
4 = 1 * 2 ^ 2 = 0100 0000 1000 0000... 0000 0000 = 4080 0000 hex
Aumenta o expoente mantissa mesmo, por uma (valor tendenciosa 129 ou 100
0000 1 em binrio.
6 = 1,5 * 2 ^ 2 = 0100 0000 1100 0000... 0000 0000 = 40C 0 0000 hex
Mesmo expoente, mantissa maior por meia-- (1) 100 0000... 0000 0000, que,
uma vez que isso uma frao binria 1 1/2 (os valores de dgitos fracionrios so
1/2, 1/4, 1/8, etc.).
1 = 1 * 2 ^ 0 = 0011 1111 1000 0000... 0000 0000 = 3F80 0000 hex
Expoente mesmo como outras potncias de 2, mantissa menos que 2 a 127 ou
011 1111 1 em binrio.

.75 = 1,5 * 2 ^ -1 = 0011 1111 0100 0000... 0000 0000 = 3F40 0000 hex
O expoente tendenciosa 126, 011 1111 binrio em 0 e mantissa (1) 100
0000... 0000 0000, que 1 1/2.
2.5 = 1,25 * 2 ^ 1 = 0100 0000 0010 0000... 0000 0000 = 4020 0000 hex
Exatamente o mesmo que 2, exceto que o bit que representa 1/4 definido em
mantissa.
0,1 = 1,6 * 2 ^ -4 = 0011 1101 1100 1100... 1100 1101 = 3DCC CCCD hex
1/10 uma frao de repetio em binrio. Mantissa menos de 1.6 e o expoente
tendenciosa informa que o 1.6 seja dividido por 16 ( 011 1101 1 em binrio, que
123 em decimal). O expoente true 123-127 = - 4, o que significa que o fator pelo
qual multiplicar 2 * * -4 = 1/16. Observe que o mantissa armazenado
arredondado o ltimo bit. Isso uma tentativa para representar o nmero
unrepresentable mais precisamente possvel. (O motivo que 1/10 e 1/100 so no
exatamente representveis no binrio semelhante maneira como 1/3 no
exatamente representveis no formato decimal.)
0 = 1.0 * 2 ^ -128 = zeros um caso especial.

Outros erros comuns de ponto flutuante


Estes so os erros comuns de ponto flutuante:
1.

Erro de arredondamento
Esse erro ocorre quando todos os bits em um nmero binrio no podem ser
usados em um clculo.
Exemplo: Adicionar 0,0001 para 0.9900 (preciso simples)
Decimal 0,0001 sero representados como:
(1) 10100011011011100010111 * 2^(-14+Bias) (13 principais 0s em binrio!)
0.9900 sero representados como:
(1) 11111010111000010100011 * 2^(-1+Bias)
Agora para adicionar, na verdade, esses nmeros, os pontos decimais de
(binrios) devem estar alinhados. Para isso deve ser Unnormalized. Aqui est
a adio resultante:
.000000000000011010001101 * 2^0 <- Only 11 of 23 Bits retained
+.111111010111000010100011 * 2^0
________________________________
.111111010111011100110000 * 2^0

2.
3.
4.
5.
6.
7.

Isso chamado de erro de arredondamento porque alguns computadores


arredondar ao deslocar para adio. Outras pessoas simplesmente
truncam. Erros de arredondamento so importantes a serem consideradas
sempre que voc estiver adicionando ou multiplicar dois valores muito
diferentes.
Subtraindo duas quase iguais aos valores
.1235
-.1234
_____
.0001

Isso ser normalizado. Observe que, embora os nmeros originais tinham


quatro dgitos significativos, o resultado tem apenas um dgito significativo.
8. Estouro positivo e negativo
Isso ocorre quando o resultado for muito grande ou muito pequeno para ser
representado pelo tipo de dados.
9. Erro quantizing
Isso ocorre com esses nmeros que no podem ser representados na forma
exata pelo padro de ponto flutuante.
10. Diviso por um nmero muito pequeno
Isso poder disparar um erro "divide by zero" ou pode produzir resultados
incorretos, como no seguinte exemplo:
11.
A = 112000000
12.
B = 100000
13.
C = 0.0009
14.
X=A-B/C
15.
No QuickBasic para MS-DOS, X agora tem o valor 888887, e no a resposta
correta, 900000.
16. Erro de sada
Esse tipo de erro ocorre quando as funes de sada alteram os valores
estiverem trabalhando com.
Voltar para o incio | Submeter comentrios

Potrebbero piacerti anche