Número de ponto flutuante: o que é? Simplesmente explicado com exemplos
Nesta dica prática, mostramos o que é um número de ponto flutuante e como ele difere de um número de ponto fixo.
Número de ponto flutuante: o que é?
Na ciência da computação, o número de ponto flutuante é frequentemente usado para medir dispositivos que devem funcionar com uma certa precisão.
- Um número de ponto flutuante (ou "número de ponto flutuante") é uma representação de um número usando notação exponencial. Em casos excepcionais, isso funciona apenas aproximadamente. Você também pode representar o número 1230000 com o número 1, 23 ⋅ 10⁶.
- O 1, 23 é chamado "Mantissa". O 10 é a "base" e o 6 é o "expoente". Aliás, um sinal também pode ser adicionado à mantissa. No entanto, você também pode aplicar tudo ao sistema dual. Você também pode representar o número 10101100 com o número 1.0101100 ⋅ 2⁷. O computador armazena apenas o sinal, mantissa e expoente.
- Os computadores geralmente movem a vírgula para frente e para trás até que haja apenas 1 na frente da vírgula. Então o PC precisa salvar apenas as casas decimais da mantissa e do expoente.
- Para que o expoente possa ser salvo como um número positivo, é adicionado um número fixo, o chamado viés. O menor expoente possível do local antes do ponto decimal (- polarização) é salvo como 0.
- Ao contrário do número de ponto fixo, a vírgula não está em um ponto fixo em um número de ponto flutuante.
Half, Float & Double - codificação comum de números de ponto flutuante
Você certamente se deparou com esses três termos, especialmente ao programar com o Arduino. Estas são representações padronizadas.
- O tipo de dados "half" é um número de 16 bits. O bit mais à esquerda é responsável pelo sinal. O expoente possui 5 bits e a mantissa 10. O viés usado é 15. Como o primeiro bit da mantissa é (quase) sempre 1, isso não é salvo.
- O tipo de dados "float" (ou "single") é um número de 32 bits. Aqui também é usado um pouco para o sinal. No entanto, o expoente tem 8 bits (viés = 127) e a mantissa 23.
- O tipo de dados "double" também usa um pouco para o sinal. Aqui, no entanto, o expoente tem 11 bits (viés = 1023) e a mantissa até 52 bits. No total, são 64 bits, ou seja, 8 bytes.
- Além desses três tipos de dados comuns, existem muitos mais. No entanto, eles geralmente não são usados porque a precisão de half, float e double já é boa o suficiente.
Converter números decimais em números de ponto flutuante - como funciona
Por fim, gostaríamos de mostrar como você pode converter um número decimal normal em um número de ponto flutuante.
- Neste exemplo, usamos o número decimal 18.4. O número antes do ponto decimal é primeiro transferido para o sistema duplo. Como resultado, você deve obter (10010) ₂.
- Então você tem que converter o 0.4. Primeiro multiplique 0, 4 por 2. Você obtém 0, 8 como resultado. Anote o número antes da vírgula. Nesse caso, é um 0. Em seguida, multiplique 0, 8 por 2. Dessa vez, você obtém 1, 6 como resultado. Anote o 1 e continue calculando com 0, 6. Depois de um tempo, você notará que o padrão se repete (neste exemplo). Por fim, anote todos os números de cima para baixo: 011001100110 ...
- Em seguida, adicione os números: Adicione também (⋅ 2⁰) para obter 10010.01100110 ... ⋅ 2⁰. Em seguida, mova a vírgula até que haja apenas 1 na frente do ponto decimal e também altere a energia adequadamente. Como resultado, você deve obter 1, 001001100110 ... ⋅ 2⁴, pois você moveu o ponto decimal 4 casas para a esquerda. Esta etapa também é chamada de "normalização".
- Neste exemplo, usamos o tipo de dados "float". Portanto, adicione o valor de viés apropriado ao seu expoente. Você também deve converter o resultado do cálculo 4 + 127 = 131 em um número binário. O número 131 é o número 10000011 no sistema duplo.
- Agora você pode anotar o número final de ponto flutuante. Primeiro escreva a parte do sinal. Como é um número positivo, o primeiro bit é 0. Então você deve escrever 131. A coisa toda se encaixa perfeitamente nesse caso, pois esse número requer 8 bits e 8 bits estão disponíveis para um float. Finalmente, você deve anotar os primeiros 23 bits da mantissa, já que a mantissa tem 23 bits disponíveis para flutuar.
- Seu número final de ponto flutuante deve, portanto, ser o número 01000001100100110011001100110011. Um pouco mais claro é o número 0 | 10000011 | 00100110011001100110011.
Converter número de ponto flutuante em número decimal - Veja como
Finalmente, gostaríamos de mostrar como você pode converter um número de ponto flutuante em um número decimal novamente. Para isso, escolhemos o número 1000001100100110011001100110011.
- Primeiro preencha o número (frente) com zeros até obter um número de 16, 32 ou 64 bits. Nesse caso, é 01000001100100110011001100110011.
- O primeiro dígito representa o sinal. Então nosso número é positivo.
- Em seguida, escreva os próximos 8 dígitos (neste caso) e subtraia o desvio. (10000011) ₂ = 131 → 131 - 127 = 4 → Portanto, há "⋅ 2⁴" na parte de trás.
- Agora escreva um "1" e todos os números restantes, além do "as 2⁴": 1.00100110011001100110011 ⋅ 2⋅
- Em seguida, mova a vírgula 4 lugares para a direita, para que você possa omitir o "⋅ 2⁴": 10010.0110011001100110011
- Em seguida, converta 10010 em um número inteiro, como de costume. Você tem 18.
- Agora você precisa converter as casas decimais. O primeiro dígito após a vírgula tem o valor 1: 2¹, o segundo dígito 1: 2² e assim por diante. Adicione os valores e o número antes da vírgula fornece o número 18.3999996185302734375.
Na próxima dica prática, mostraremos como você pode converter letras ASCII em números binários.