Convertendo IEEE 754 32 bits para decimal e vice-versa

Book

 

O padrão IEEE 754 foi desenvolvido pelo Instituto de Engenheiros Eletricistas e Eletrônicos e adotado nos anos 2000, sofrendo algumas modificações ao longo do tempo, mas sendo até hoje o principal padrão para operações e representatividade de números binários com ponto flutuante. Para este artigo, é esperado um conhecimento básico sobre conversão de base para um melhor aproveitamento do conteúdo.

 

Precisão

As principais precisões para a representação binária que conhecemos, são: precisão simples de 32 bits, que será abordada neste artigo, e a precisão dupla de 64 bits.

 

Precisão Simples (float)

Float

 

Precisão Dupla (double)

Double

 

Normalização

A fórmula abaixo, em notação científica, existe para que o número esteja de acordo com as normas pré estabelecidas para o cálculo:

Fórmula

 

Sinal

O sinal sempre será representado apenas por um bit, sendo (1) negativo ou (0) positivo.

 

Mantissa

A mantissa é parte de um número em notação científica ou um número de ponto flutuante, consistindo em seus dígitos significativos.

 

Expoente

O expoente irá depender do resultado do cálculo, onde será somado a “representação em excesso”, mais conhecido como Bias na precisão simples em 32 bits, valendo 127.

Vale ressaltar que o expoente (E) pode ser positivo ou negativo, mas não é armazenado em complemento de dois.

Expoente

 

Convertendo número decimal para o padrão IEEE 754

Teremos como base o número 121.3 em decimal, e iremos representá-lo como ponto flutuante com precisão de 32 bits, seguindo os passos:

 

Passo 1 - Converter o número para binário

Primeiramente, iremos converter o número 121.3 de decimal para binário. Efetuaremos a conversão para binário por partes, começando pelo 121:

Divisão

Podendo ser escrito da seguinte forma:

Resultado

Agora, converteremos a parte decimal .3:

Multiplicação

Perceba que será utilizado apenas o primeiro valor antes da vírgula ou ponto, ou seja, como 0.3 x 2 = 0.6 utilizaremos apenas o 0; de modo análogo: como 0.6 x 2 = 1.2 utilizaremos apenas o 1 e assim por diante.

Assim, tendo como resultado final os seguintes valores:

Resultado

 

Passo 2 - Representar o binário em notação científica

Nesta etapa, deslocaremos a vírgula e fazer a contagem das casas, adicionando o valor da quantidade de casas no expoente:

Notação Científica

 

Passo 3 - Converter a notação científica para o formato IEEE 754

Utilizaremos a seguinte representação, como já mostrada antes, para a conversão do número:

| Sinal | Expoente |          Mantissa          |

Como o número 121.3 é positivo, por padrão, é sugerido que o bit de sinal seja 0, caso o número fosse negativo, o bit de sinal seria 1.


| 0 | Expoente |          Mantissa          |

Em seguida, representaremos os bits de expoente e, para isso, precisamos ficar atentos com o Bias. Sabemos que o Bias para precisão simples é 127.

Se o expoente da notação científica for positivo nós somaremos o expoente ao Bias, caso contrário, iremos subtrair.

Nesse caso, somando o Bias com o expoente teremos:

127+6=133

E em seguida, converteremos o resultado 133 para binário:

Resultado em Binário

e voilà, aí está nosso expoente!

| 0 | 10000101 |             Mantissa             |

E por fim, a mantissa. Para isso, precisamos apenas copiar a parte da própria mantissa da conversão para notação científica, mostrada no Passo 3:

| 0 | 10000101 |   11100101001100110011010...   |

Logo, o resultado final da conversão é: 01000010111100101001100110011010….

 

Convertendo número no padrão IEEE 754 para decimal

Agora iremos fazer o processo inverso. Utilizaremos o resultado obtido anteriormente no formato IEEE 754 para ficar mais compreensível o processo.

| S | Expoente |          Mantissa          |
|:-:|:--------:|:--------------------------:|
| 0 | 10000101 | 11100101001100110011010... |

 

Passo 1 - Identificar o sinal

O valor dado em formato IEEE 754 tem o sinal positivo pois começa com 0, sendo assim, o número decimal resultante também será positivo. Caso o bit de sinal fosse 1, o número decimal resultante seria negativo.

 

Passo 2 - Converter o expoente para decimal e encontrá-lo

Fazendo a conversão do expoente em binário para decimal, teremos o seguinte resultado:

Resultado em Decimal

Neste caso, para encontrar o expoente, precisamos fazer a operação inversa. Iremos subtrair o valor 133 obtido na conversão, pelo Bias.

Subtração

 

Passo 3 - Converter a mantissa para decimal

Sabendo que a mantissa é a parte fracionária, devemos converter da seguinte forma:

Conversão de bit fracionário

Teremos então o seguinte resultado:

Resultado

Percebe-se que não foi calculado toda a mantissa, afinal, ela chega a um ponto onde só se repete.

Uma dica para economizar tempo ao converter números grandes como esse é perceber as repetições e calcular somente o necessário. No cálculo acima, só foi utilizado os bits até o momento antes de iniciar uma repetição.

 

Passo 4 - Aplicação na fórmula geral

Por fim, iremos substituir os valores obtidos anteriormente na seguinte fórmula para conversão:

Fórmula

Resultando em:

Resultado

Perceba que o valor resultante chegou muito próximo do esperado que é 121.3, logo, pode ser tranquilamente arredondado sem nenhum problema.

 

Conclusão

Neste artigo foi abordado de forma simples e prática a conversão de números no formato IEEE 754 para decimal e vice-versa, sendo esse um cálculo muito visto nos cursos de Computação e Eletrônica.


Obrigado pela leitura!