Murilo :P

C++, Computação, Programação, Web e afins :)

Um pouco sobre números de ponto flutuante (floats e doubles)

leave a comment »

Representação de números reais

Nos computadores atuais:

  • É impossível a representação de números reais em computadores binários digitais porque a representação binária é discreta.
  • Em qualquer linguagem de programação utilizamos representações que prevêem algum grau de arredondamento.

Antes de começar a falar de ponto flutuante vamos ver um pouco de ponto fixo.

Ponto fixo

Denotamos um número de ponto fixo quando especificamos o número de casas para a parte inteira e fracionária (matisse).

Exemplo: Ponto fixo 1.15 (Um bit para a parte inteira e quinze para a parte fracionária).

Ponto fixo

Na figura acima, podemos ver que reservei um bit para a parte inteira do número e 15 para a fracionária.

Dessa forma sempre teremos números menores que dois, pois como está reservado somente um bit para a parte inteira, o maior valor que esse bit pode valer é 1. A parte fracionária começa do 2^-1 e vai até o 2^-15. Esses valores são interpretados literalmente.

Por exemplo, o valor binário 1010 0000 0000 0000 corresponde a 2^0 + 2^-2 = 1.25.

Dessa forma, o menor número seria 0000 0000 0000 0000
E o maior: 1111 1111 1111 1111.

Ponto flutuante (IEEE 754)

Precisão simples
  • Possui 32 bits

Uso dos bits:

Ponto flutuante

  • Sinal – Um bit que indica se o número é positivo (0) ou se é negativo (1).
  • Expoente – Um byte que contem o expoente. O expoente corresponde a soma do expoente com 127 (ou seja, para encontrar o verdadeiro valor do expoente, deve-se subtrair esse byte de 127. Atenção: o expoente com valor zerado (00h) ou todo ativado (FFh) tem significado especial
  • Parte fracionária (matissa) – Representa a parte fracionária do número.

Que estranho? Cadê a parte inteira do número? Aonde ela está sendo representada?
Resposta: O ponto flutuante proposto pela IEEE 754 sugere que usemos números em notação científica de modo que (em binário):

101.11 x 2 ^ 15 = 1.0111 x 2 ^ 17

Ou seja: quando trabalhamos com notação científica, se temos um número que tenha mais de uma casa inteira, mechemos no expoente de modo que fique com uma. O mesmo ocorre aqui, e se esse valor vai ser sempre 1 nesse caso, não precisamos colocar ele lá. Assim ganhamos uma casa pro expoente.

Mas, como assim sempre 1? E se eu quiser representar o zero?
Aí caímos naqueles significados especiais, lembra?

Vamos ver:

Tabela de valores especiais para ponto flutuante.

Onde s = sinal, e = expoente, m = matisse.
Observações: e = 0 e m ≠ 0 indica que o número está em uma representação não-normalizada.
Fonte da tabela: Wikipedia.

Talvez no próximo post eu termine de falar sobre pontos flutuantes.

Advertisements

Written by Murilo Adriano

28 de November de 2007 at 00:43

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: