Como converter números fracionários em binários
Nem tudo na computação são números inteiros. Como podemos representar números com casas decimais em formato binário?
Antes de seguirmos, suponho que já saiba como converter inteiros para binários, certo?
Se sua resposta foi sim, vamos em frente!
Se sua resposta foi não, sem problemas! Eu explico como fazer isso neste outro post: https://webadventures.medium.com/como-converter-inteiros-em-bin%C3%A1rios-e-vice-versa-5cb2250c85a7
Convertendo números fracionários em binários
Para nosso exemplo, vamos converter o número 30.75 para sua forma binária, certo? Vamos realizar os seguintes passos:
- Primeiramente, precisamos separar a parte inteira e a parte decimal:
- No caso, 30.75 = 30 parte inteira e 0.75 parte decimal;
- Vamos converter a parte inteira (30) em binário. Para isso, podemos utilizar tanto as divisões inteiras por 2 ou as potências de base 2.
- Logo, 30 = 1 1 1 1 0
- Agora, vamos converter a parte decimal (0.75). O processo é um pouco diferente a partir daqui;
- Ao invés de dividir por 2, vamos multiplicar a parte decimal por 2 sucessivas vezes:
- Se o resultado for maior que 1, armazenamos 1 e multiplicamos novamente apenas a parte decimal por 2
- Se o resultado for menor que 1, armazenamos 0 e multiplicamos novamente por 2
- Se o resultado for igual a 1, armazenamos o 1 e encerramos as multiplicações.
- Logo, 0.75 x 2 = 1.50, armazena 1 e multiplica a parte decimal (0.50)
- 0.50 x 2 = 1, armazena 1 e encerra as multiplicações.
- Obtendo os binários da parte inteira e da parte decimal, basta unir as duas partes: 30.75 = 1 1 1 1 0 . 1 1
Pode parecer complexo e trabalhoso, mas é simples quando colocamos na prática, vamos testar?
Dessa forma, conseguimos converter números fracionários para binários.
Convertendo binários em números fracionários
A conversão de binários em números fracionários é semelhante à conversão de binários em inteiros. Vamos utilizar uma tabela de potências de base 2, porém o expoente será negativo.
Para exemplificar, vamos converter o binário 10100.011 em um número fracionário, seguindo estes passos:
- Separamos a parte inteira (10100) e a parte fracionária (.011);
- Convertemos a parte inteira:
- 2⁴(1) 2³(0) 2² (1) 2¹(0) 2⁰(0) = 2⁴ + 2¹ = 16 + 4 = 20;
- Convertemos a parte fracionada, neste caso, os expoentes são negativos:
- 2-¹(0) 2-²(1) 2-³(1) = 2-² + 2-³ = 0.25 + 0.125 = 0.375;
- Agora, basta somar os resultados:
- 20 + 0.375 = 20.375
Vamos observar visualmente para facilitar o entendimento:
O sistema binário NÃO lida muito bem com números fracionários…
Números fracionários estão para o sistema binário, assim como números irracionais estão para o sistema decimal.
Representar frações na forma de binários pode ser bem problemático. Para entendermos melhor, vamos pensar na fração 1/3:
Sabemos que 1/3 = 0.33333… ou seja, não existe representação exata desta fração quando a convertemos para um número decimal. É um número irracional, onde número que sua parte fracionária é infinita.
O melhor que podemos fazer para representar um número irracional na base 10, é realizar uma aproximação. Como por exemplo, representamos a fração 1/3 ≅ 0.3. Sabemos que 0.3 não é exatamente igual a 1/3, mas é a melhor aproximação possível de um valor exato.
A mesma coisa acontece com o sistema binário, que se torna bastante limitado para representar o valor exato de números fracionários. Para exemplificar, vamos converter o número 12.28 para binário:
Note que não conseguimos alcançar o valor 1 exato para encerrar as multiplicações. Sendo assim, somos obrigados a realizar uma aproximação, tal como fizemos com os irracionais na base 10.
Mas então, como o computador processa números fracionários?
Como sabemos, computadores entendem apenas números binários. E mesmo assim, conseguem processar casas decimais com precisão, certo? Errado.
As linguagens de programação também trabalham com aproximações e correções para reduzir ao máximo estas imprecisões. E eu posso te provar agora mesmo: Se você abrir o console de Javascript do seu navegador e realizar a operação 0.1 + 0.2, verá que o resultado não será exatamente 0.3!
Isso acontece por conta da imprecisão dos números fracionários no sistema binário, quando o computador converte 0.1 e 0.2 para binários, ele precisa realizar uma aproximação destes valores, pois não existe um valor exato para representar 0.1 e 0.2 em binário. Logo a soma entre ambos também será imprecisa.
Pouquíssimas frações são representáveis com exatidão, como o caso do 0.75. A grande maioria se torna um binário infinito, e como o computador não possui memória infinita, precisamos trabalhar com aproximações do valor real.
E ficamos por aqui, espero ter conseguido te explicar como fazemos para converter frações em binários e também os motivos da grande maioria delas se tornarem infinitas neste sistema.
Obrigado por ler até aqui e até a próxima!