Pesquisa · Mapa mental

Vírgula flutuante

Vírgula flutuante ou ponto flutuante é um formato de representação digital de números racionais, que é usada nos computadores.

Fonte: Wikipédia (pt)Atualizado em 06/10/2026
01

História

Vários estudiosos contribuíram para a história da virgula flutuante, dentre eles, Leonardo Torres y Quevedo, que, em 1914 projetou uma versão eletromecânica da Máquina Analítica de Charles Babbage, e nela incluiu a aritmética de ponto flutuante. Já Konrad Zuse de Berlim, em 1938, completou o Z1, o primeiro binário programável em um computador mecânico. A representação que ele utiliza é de número de ponto flutuante binário de 24 bits com um expoente assinado de 7 bits, um significando (incluindo um bit implícito) e um bit de sinal. O binário Z3 foi concluindo em 1941 e tem representações para infinitos positivos e negativos; em particular, ele implementa operações definidas com infinito, como 1/ ∞ = 0 ,e para em operações indefinidas, como 0 x ∞. Konrad Zuse também propôs o Z3, mas não completou. A aritmética de ponto flutuante cuidadosamente arredondada que incluem ± ∞ e representações NaN, antecipando recursos do IEEE que foi padrão por quatro décadas. Por outro lado, von Neumann recomendou contra números de ponto flutuante para a máquina IAS 1951, argumentando que a aritmética de ponto fixo é preferível.

02

Generalidades

Ao falar em números reais a visualização vinda à cabeça é: No entanto, essa representação custa caro, em termos de processamento e armazenamento ao computador havendo a necessidade de utilizar uma outra maneira que favoreça tais tarefas. Para trabalhar com a parte fracionária de forma satisfatória, usa-se a representação por vírgula flutuante. Essa representação baseia-se no deslocamento da vírgula de forma que se obtenha um número menor ou próximo de 1. Esse deslocamento é feito por meio de notação científica. Esclarecendo: o número 25,456 em notação corresponde ao 0,25456 x 102. O exemplo acima tinha como base a decimal, no entanto o computador trabalha com a base 2 (binários – 0 e 1). Então um número binário 11,011 em notação corresponde ao 0,11011 x 22. Esse processo de transcrever um número em notação científica recebe o nome de normalização, portanto 0,11011 x 22 está normalizado. De forma geral, representa-se um número em vírgula flutuante da seguinte forma:

Números representáveis, conversão e arredondamento

Por sua natureza, todos os números expressos em formato de ponto flutuante são números racionais com uma expansão terminante na base relevante (por exemplo, uma expansão decimal terminante na base-10, ou uma expansão binária terminante na base-2). Números irracionais, como π ou √2, ou números racionais não terminativos, devem ser aproximados. O número de dígitos (ou bits) de precisão também limita o conjunto de números racionais que podem ser representados exatamente. Por exemplo, o decimal número 123456789 não pode ser exatamente representado se apenas oito dígitos decimais de precisão estiverem disponíveis (seria arredondado para 123456790 ou 123456780 quando o dígito 0 mais certo não está explicitamente representado), o mesmo se aplica a dígitos não terminativos (0,5 a ser arredondado para .55555555 ou .5555556).

Modos de arredondamento

Os modos de arredondamento são usados quando o resultado exato de uma operação de ponto flutuante (ou uma conversão para formato de ponto flutuante) precisaria de mais dígitos do que contém. O IEEE 754 necessita de um arredondamento correto: ou seja, o resultado arredondado é como se a aritmética infinitamente precisa fosse usada para calcular o valor e, em seguida, arredondada (embora na implementação apenas três bits extras são necessários para garantir isso). Existem alguns esquemas de arredondamento diferentes (ou modos de arredondamento). Historicamente, o truncamento era a abordagem mais comum. Desde a introdução do IEEE 754, o método padrão (arredondado para o número mais próximo, vinculado ao mesmo, ou arredondamento direcionados, também denominado de Arredondamento de Banker) é mais comumente usado. Este método contorna o resultado ideal (infinitamente preciso) de uma operação aritmética ao valor representável mais próximo, e dá essa representação como resultado. No caso de um empate, o valor resultante e terminado em um dígito uniforme é escolhido. A norma IEEE 754 requer o mesmo arredondamento a ser aplicado a todas as operações algébricas fundamentais, incluindo raiz quadrada e conversões, quando há um resultado numérico (não-NaN). Isso significa que os resultados das operações do IEEE 754 são completamente determinados em todos os trechos do resultado, exceto na representação das NaNs. (funções de "Biblioteca", como cosseno e log, não são obrigatórias).

03

Propriedades

Esta aritmética tem duas diferenças fundamentais: ela não é, necessariamente, nem associativa nem distributiva: ( x + y ) + z ≠ x + ( y + z ) {\displaystyle (x+y)+z\neq x+(y+z)} x ⋅ ( y + z ) ≠ ( x ⋅ y ) + ( x ⋅ z ) {\displaystyle x\cdot (y+z)\neq (x\cdot y)+(x\cdot z)} . Ou seja, a ordem em que você estiver executando operações de ponto flutuante pode influenciar o resultado. Isto é importante para a análise numérica, uma vez que duas fórmulas matematicamente equivalentes podem ter resultados e precisões diferentes. Por exemplo, na maioria das aplicações de ponto flutuante, 1,0 + (10100 + -10100) resulta em 1,0, enquanto que (1,0 + 10100) + -10100 dá 0,0[carece de fontes]?

04

Problemas

Em geral, o conjunto de números representáveis pela notação de ponto flutuante é semelhante o suficiente ao conjunto dos números reais para a maior parte das aplicações, o que no entanto frequentemente leva programadores a desconsiderar a importância da análise numérica adequada sobre os resultados obtidos. Há muitas inconsistências entre o comportamento dos números de ponto flutuante em base 2 (binário) e os números reais, mesmo em casos muito simples (como a fração decimal 0,1, que por em binário ser uma dízima periódica, não pode ser expressa de maneira exata por qualquer representação binária finita). As principais causas de erro com uso de ponto flutuante são: A notação de ponto flutuante é particularmente adequada quando se almeja uma maior amplitude do domínio representável em detrimento da constância da precisão, cenário frequente em aplicações científicas e de engenharia. Instituições financeiras, porém, frequentemente dão preferência à notação de ponto fixo almejando uma precisão constante.

05

Alternativas

A representação de ponto flutuante é de longe a maneira mais comum de representar em computadores uma aproximação de números reais. No entanto, existem alternativas:

06

Exemplos

é representada por: 1/10 + 2/100 + 5/1000. Da mesma forma, a fração binária: tem valor: 0/2 + 0/4 + 1/8. Os dois valores são idênticos, sendo o primeiro escrito na base 10 e o segundo na base 2. Tabela com exemplos de números reais de três dígitos significativos e sua representação em notação científica:

Valores especiais

As notações com os bits do campo expoente (e) todos a um ou todos a zero são reservadas para valores especiais. O zero é representado com e=0 e m=0. Outros valores de m com e=0 indicam números não normalizados. Nestas casos considera-se a mantissa entre 0 e 1.

07

Operações aritméticas

As operações em pontos flutuantes são encontradas normalmente em sistemas que operam em uma grande faixa, de número muito grandes ou muito pequenos, que exige tempo de processamento rápido. Um número, em geral, é representado para um número fixo de dígitos significativos, e escalado usando um expoente em alguma base fixa. Nos sistemas digitais, a base utilizada é a base binária. Desde a década de 1990, a representação mais usada é a definida pelo padrão IEE 754.

Adição e Subtração

Para realizar as operações de adição e subtração é necessário seguir alguns passos, para isso consideramos a soma ou subtração entre dois números, X e Y: Passo 1 - Escolher o número com menor expoente entre X e Y e deslocar sua mantissa para a direita um número de dígitos igual à diferença absoluta entre os respectivos expoentes; Passo 2 - Colocar o expoente do resultado igual ao maior expoente entre X e Y; Passo 3 - Executar a adição ou subtração das mantissas e determinar o sinal do resultado; Passo 4 - Normalizar o valor do resultado, se necessário; Passo 5 Arredondar o valor do resultado, se necessário; Passo 6 - Verificar se houve overflow/underflow.

Multiplicação e divisão

Para realizar a multiplicação é necessário colocar os valores na notação de vírgula flutuante e verificar se a base (B) é igual, caso negativo deve-se realizar a mudança de base de um dos valores para que ambos tenham a mesma base, em seguida deve-se multiplicar suas mantissas (M) e somar seus expoentes (e). Por exemplo, multiplicar X1=2.569854 x 103 por X2=5.238756 x 105 , percebe-se que base (B) é igual para ambos os valores B=10. Passo 1: Representar os valores na notação de vírgula flutuante: +- M X B+-e. X1=0.2569854 x 104 , onde M1=0.2569854 ; e1=+4 X2=0.5238756 x 106 , onde M2=0.5238756 ; e2=+6 Passo 2: Multiplica-se as mantissas (M) e soma-se os expoentes (e)

08

Implementação

Muitas frações decimais não podem ser representadas exatamente como frações binárias finitas. Por consequência, diversos números armazenados na máquina em variáveis do tipo ponto flutuante (float, double, real) são apenas aproximações. Considere, por exemplo, a fração 1/3. Uma aproximação decimal seria: e assim por diante. Não existe uma fração finita capaz de resultar em exatamente 1/3. Um outro exemplo interessante é a fração 1/10. Em muitas linguagens de programação, apesar de rotinas de impressão mostrar o valor 0,100000, se exibirmos o número com maior precisão (por exemplo, 20 casas decimais), veremos que o valor real armazenado será algo aproximado de: 0,10000000149001612000 (o valor pode mudar segundo o hardware e a linguagem utilizada). Assim, ao programar é preciso ter cuidado com números em ponto flutuante, em especial com acumuladores e comparações.

09

Precisão da máquina e análise de erro reverso

A precisão da máquina é uma quantidade que caracteriza a exatidão de um sistema de ponto flutuante e é usada na análise de erros retroativos de algoritmos de ponto flutuante. É também conhecido como arredondamento da unidade ou épsilon da máquina. Normalmente denotado por Εmach, seu valor depende do arredondamento particular que está sendo usado. E m a c h = B 1 − P {\displaystyle E_{mach}=B^{1-P}} , onde B é caracterizado como a base do sistema de ponto flutuante e P a precisão. E m a c h = 0 , 5 B 1 − P {\displaystyle E_{mach}=0,5B^{1-P}} , onde este é o maior valor possível para o erro relativo. Isso é importante, pois limita o erro relativo na representação de qualquer número real diferente de zero dentro do intervalo normalizado de um sistema de ponto flutuante: | f l ( x ) − x x | ≤ E m a c h {\displaystyle \left\vert {\frac {fl(x)-x}{x}}\right\vert \leq E_{mach}} A análise de erros reversos, cuja teoria foi desenvolvida e popularizada por James H. Wilkinson, pode ser usada para estabelecer que um algoritmo que implementa uma função numérica é numericamente estável. A abordagem básica é mostrar que embora o resultado calculado, devido a erros de arredondamento, não seja exatamente correto, é a solução exata para um problema próximo com dados de entrada levemente perturbados. Se a perturbação necessária for pequena, na ordem da incerteza nos dados de entrada, então os resultados são, em certo sentido, tão precisos quanto os dados "merecem". O algoritmo é então definido como estável com versões anteriores. A estabilidade é uma medida da sensibilidade a erros de arredondamento de um determinado procedimento numérico; em contraste, o número de condições de uma função para um determinado problema indica a sensibilidade inerente da função a pequenas perturbações em sua entrada e é independente da implementação usada para resolver o problema.

Vídeos recomendados

Fontes consultadas

Continue pesquisando