Calculadora de Ponto Flutuante
- Como usar a calculadora de ponto flutuante
- O que é um número de ponto flutuante IEEE754?
- Como os números reais são armazenados com a representação de ponto flutuante?
- O formato de precisão única de 32 bits do ponto flutuante
- O formato de precisão dupla de 64 bits do ponto flutuante
- Como converter um número em ponto flutuante?
- Precisão do ponto flutuante
- FAQ
A calculadora de ponto flutuante da Omni está aqui para ajudar você a entender o padrão IEEE754. Ela atua como um conversor para números de ponto flutuante. Ela converte números flutuantes de 32 bits e 64 bits de representações binárias para números decimais reais e vice-versa.
💡 Você quer converter números binários para o sistema decimal? Talvez tenha interesse no conversor binário 🇺🇸 da Omni!
Como usar a calculadora de ponto flutuante
Antes de entrarmos nos bits e bytes dos formatos de números float32
e float64
, vamos aprender como funciona a calculadora de ponto flutuante. Basta que você siga estes passos simples:
-
Se você quiser converter a codificação binária de um número de ponto flutuante para o número decimal que ele representa, selecione
ponto flutuante para número
na parte superior da calculadora. Em seguida:-
Selecione a precisão usada. Isso determina como sua representação binária será interpretada.
-
Digite os dígitos binários do número de ponto flutuante. Você pode inserir o sinal, o expoente e a fração separadamente, ou pode inserir toda a cadeia de bits de uma só vez. Selecione sua preferência no menu suspenso
método de entrada de bits
. -
O valor armazenado em seu float será mostrado na parte inferior da calculadora.
-
-
Se você quiser converter um valor em sua representação de ponto flutuante, selecione
número para ponto flutuante
na parte superior da calculadora. Em seguida:-
Digite o número no próximo campo.
-
As representações binárias e hexadecimais do ponto flutuante IEEE754 de precisão simples e dupla serão mostradas abaixo.
-
A calculadora de ponto flutuante também mostrará a você o valor real armazenado devido à perda de precisão inerente ao formato de ponto flutuante. O erro devido a essa perda de precisão também será relatado.
-
O que é um número de ponto flutuante IEEE754?
Na computação, um número de ponto flutuante é um formato de dados usado para armazenar números fracionários em uma máquina digital. Um número de ponto flutuante é representado por uma série de bits (1
e 0
). Os computadores realizam operações matemáticas usando esses bits, reproduzindo operações que fazemos com números decimais. Quando um ser humano deseja ler o número de ponto flutuante, uma fórmula complexa reconstrói os bits no sistema decimal.
O padrão IEEE754 (estabelecido em 1985 pelo Instituto de Engenheiros Elétricos e Eletrônicos) padronizou o formato de ponto flutuante e também definiu como o formato pode ser operado para executar cálculos matemáticos e outras tarefas. Ele foi amplamente adotado por projetistas de hardware e software e se tornou o padrão para representar números de ponto flutuante em computadores. Quando alguém menciona “números de ponto flutuante” no contexto da computação, geralmente se refere ao formato de dados IEEE754.
💡 O desempenho (ou seja, a velocidade) de um computador pode ser medido pelo número de operações de ponto flutuante que ele pode fazer por segundo. Essa métrica é chamada de FLOPS e é crucial nos campos da computação científica.
O formato de ponto flutuante IEEE754 mais conhecido (precisão simples, ou “32 bits”) é usado em quase todos os aplicativos de computadores modernos. O formato é altamente flexível: o float32
pode codificar números tão pequenos quanto 1,4×10-45 e tão grandes quanto 3,4×1038 (positivos e negativos).
Além do formato de precisão simples, o padrão IEEE754 também codifica a precisão dupla (“64 bits” ou float64
), que pode armazenar números de 5×10-324 a 1,7×10308. Os formatos IEEE754 menos usados incluem:
- Meia precisão (“16 bits”);
- Precisão quádrupla (“128 bits”); e
- Precisão óctupla (“256-bit”).
💡 Tecnicamente, embora o IEEE754 defina apenas esses formatos, qualquer precisão arbitrária é possível. Muitos computadores antigos usavam números de ponto flutuante de 24 bits!
No entanto, um número de ponto flutuante não é simplesmente um número conversor integrado ao sistema de números binários; ele é muito mais complicado do que isso! Vamos aprender como funciona o padrão de ponto flutuante IEEE754.
Como os números reais são armazenados com a representação de ponto flutuante?
Qualquer representação binária de ponto flutuante consiste em três segmentos de bits: sinal, expoente e fração.
- O sinal (
S
) indica se o número é positivo ou negativo; - O exponente (
E
) eleva 2 a alguma potência para escalonar o número; e - A fração (
F
) determina os dígitos exatos do número.
Os comprimentos dos segmentos e a fórmula exata aplicada a S
, E
e F
para recriar o número dependem da precisão do formato.
Quando armazenados na memória, , e são colocados de ponta a ponta para criar a representação binária completa do número de ponto flutuante. Na memória do computador, ele pode ter a seguinte aparência:
Esses bits são o que o computador manipula quando a aritmética e outras operações são realizadas. O computador nunca vê um número como seus dígitos decimais, ele só vê e trabalha com esses bits.
💡 A escolha da precisão depende do que o aplicativo exige. Mais precisão significa mais bits e maior exatidão, mas também maior espaço de armazenamento e maior tempo de computação.
Vejamos em mais detalhes os dois formatos de ponto flutuante mais comuns: float32
e float64
.
O formato de precisão única de 32 bits do ponto flutuante
O float32
é o formato IEEE754 mais comumente usado. Conforme sugerido pelo termo “32-bit float”, sua representação binária subjacente tem 32 bits de comprimento. Eles são segmentados da seguinte forma:
- 1 bit para o sinal ();
- 8 bits para o expoente (); e
- 23 bits para a fração ().
Quando armazenados na memória, os bits têm a seguinte aparência:
Podemos reescrevê-lo como uma cadeia de caracteres (string) binária:
O valor real que esse float de 32 bits armazena pode ser calculado da seguinte forma:
onde:
- é chamado de desvio de expoente e é inerente ao formato de precisão simples;
- significa que deve ser interpretado como se estivesse na base 2 ou binária; e
- significa que você deve pegar os bits binários a e usá-los como a parte fracionária de para formar uma fração binária. Consulte nosso conversor de frações binárias 🇺🇸 para obter ajuda sobre esse tópico.
Você pode reescrever melhor a fórmula usando , e , ou seja:
onde:
- ;
- ; e
- .
Para permitir que os formatos de ponto flutuante armazenem números realmente pequenos com alta precisão, e devem ser aplicados a uma outra fórmula. Para o float32
, essa fórmula é:
Os números criados por essa fórmula são chamados de “números subnormais”, enquanto os “números normais” são criados usando a fórmula anterior.
Há outros casos especiais, codificados por valores específicos para e :
Valor | ||
---|---|---|
Qualquer um | ||
significa “não é um número” (Not a Number em inglês), que é retornado quando você divide por zero ou realiza cálculos impossíveis usando o infinito. Nos casos de e , o bit de sinal determina se o número é positivo ou negativo. E sim, o zero negativo existe!
Um exemplo
Vamos converter a representação binária de ponto flutuante 01000001110111100000000000000000
para o número real que ela representa.
-
Primeiro, vamos segmentá-lo em , e :
-
-
Como , usamos a fórmula do número normal:
-
(portanto, o número é positivo!)
-
-
-
-
Combine os três números através de uma multiplicação:
Quer ver com seus próprios olhos? Experimente esse valor em nossa calculadora de ponto flutuante para que você a veja em ação!
Observe que convertido diretamente de binário para decimal não é , mas . Uma grande diferença, você não acha?
💡 A fórmula dos números de ponto flutuante pode ser vista como uma forma de notação científica, onde utilizamos potências de base de 2. Podemos reescrever o exemplo acima como . Consulte nossa calculadora de notação científica para obter mais informações.
O formato de precisão dupla de 64 bits do ponto flutuante
Os funcionamentos internos do tipo de dados float64
são muito parecidos com os do float32
. As principais diferenças entres esses dois floats são:
- Os comprimentos dos segmentos de expoente e fração da representação binária: em floats de 64 bits, ocupa 11 bits e ocupa 52.
- O desvio de expoente: em floats de 64 bits, é 1023 (enquanto em floats de 32 bits, é 127).
As fórmulas para a reconstrução de pontos flutuantes normais e subnormais de 64 bits são, portanto, respectivamente:
e
Devido aos bits adicionais de expoente e fração em comparação com o float32
, o float64
pode armazenar números muito maiores e com precisão muito maior.
💡 Todos os formatos de ponto flutuante IEEE754 seguem esse padrão, sendo que as maiores diferenças são a polarização e os comprimentos dos segmentos.
Como converter um número em ponto flutuante?
Para converter um número decimal em uma representação de ponto flutuante, siga estas etapas:
- Converta o número inteiro para binário e, em seguida, normalize-o, ou seja, escreva-o em notação científica usando a base 2.
- Trunque a fração após o ponto decimal para o comprimento de fração permitido.
- Extraia o sinal, o expoente e os segmentos da fração.
Consulte o padrão IEEE754 para obter instruções mais detalhadas.
Um exemplo
Vamos converter de volta à sua representação de ponto flutuante.
-
Nossa parte inteira é , que em binário é . Nossa parte fracionária é . Vamos convertê-la em uma fração binária:
Portanto, , e . Para normalizá-lo, nós o reescrevemos como:
-
- Os dígitos após o ponto decimal já têm um tamanho adequado. Para
float32
, estaríamos limitados a 23 bits, mas temos apenas cinco.
A partir da reescrita normalizada, podemos deduzir que:
- , já que o número é positivo;
- (adicionamos porque deve ser ); e
- (os zeros são preenchidos à direita porque estamos lidando com dígitos fracionários e não com um número inteiro).
Portanto, nossa representação de ponto flutuante é: .
Você pode verificar esse resultado com a calculadora de ponto flutuante da Omni!
Precisão do ponto flutuante
Os números de ponto flutuante não podem representar todos os números possíveis com precisão total. Isso faz sentido intuitivamente para números suficientemente grandes e para números com um número infinito de casas decimais, como o pi () e o número de Euler (). Mas você sabia que os computadores não conseguem armazenar um valor tão simples como com 100% de precisão? Vejamos em detalhes essa afirmação!
Quando você pede a um computador para armazenar como um float32
, ele armazenará essa cadeia de caracteres binária:
00111101110011001100110011001101
Se você converter isso de volta para decimal com as fórmulas de ponto flutuante que aprendemos acima, obteremos o seguinte:
Isso é um pouco mais do que ! O erro (a distância entre o valor de ponto flutuante armazenado e o valor “correto” de ) é .
Tentemos corrigir esse erro e fazer a menor alteração possível. Nosso número armazenado é um pouco grande demais, então vamos alterar o último bit de para para tornar nosso float um pouco menor. Agora estamos convertendo:
00111101110011001100110011001100
E novamente passamos longe de ! Desta vez, o erro é um pouco maior (). A primeira cadeia de caracteres binária que terminou em 1
estava ainda mais correta do que esta!
Você pode pensar: “e se usássemos mais bits?” Bem, se você fizesse o mesmo com o formato float64
, encontraria o mesmo problema, embora menos grave. convertido para um ponto flutuante de 64 bits e de volta para decimal é , e o erro aqui é . Essa é a maior precisão do float64
em ação, mas o erro ainda não é , a conversão ainda não é sem perdas.
Infelizmente, essa é a desvantagem do onipresente formato de ponto flutuante: não é 100% preciso. Pequenos fragmentos de informação são perdidos e podem causar estragos se não forem levados em conta. Os únicos números que podem ser armazenados perfeitamente como float sem nenhuma perda são potências de 2 escalonadas por inteiros porque é assim que o formato armazena números. Todos os outros números são simplesmente aproximados quando armazenados como um número de ponto flutuante. Ainda assim, isso é o melhor que temos.
💡 Algumas operações são mais resistentes à perda de precisão. Experimente nossa calculadora de número de condição para ver o quanto uma perda de precisão afetará as operações de matriz.
FAQ
Por que usamos números de ponto flutuante?
O padrão IEEE754 de ponto flutuante permite o armazenamento e processamento eficientes de números em computadores.
-
Do ponto de vista do hardware, muitas simplificações das operações de ponto flutuante podem ser feitas para acelerar significativamente a aritmética, graças às especificações do padrão IEEE754.
-
Para o software, os pontos flutuantes são muito precisos e normalmente perdem alguns milionésimos (se não menos) por operação, o que permite aplicações científicas e de engenharia de alta precisão.
Qual é a representação em ponto flutuante de 12,25?
A representação em ponto flutuante de 12,25 é 01000001010001000000000000000000
. Seu sinal é 0, seu expoente é 100000102 = 130 e sua fração é 100010...0. Reconstruído em decimal, obtemos:
(-1)0 × 2(130-127) × (1,10001)2
= 1 × 23 × 1,53125
= 12,25
S = 02 = 0
E = 000000002 = 0
F = 000000000000000000000002 = 0
000000000000000000000000000000002
00000000H
E=0
and F=0
is a special case for ±0. Because S=0
, the final result is +0.