Como lidar com números reais na prática
A maioria dos materiais didáticos apresenta números reais como algo abstrato e separado do dia a dia, mas quando você trabalha com dados numéricos de verdade, a distinção entre inteiros, racionais e irracionais deixa de ser teoria e vira um problema concreto de precisão e armazenamento. Trabalhando com cálculos financeiros e processamento de dados, eu precisei lidar com uma situação em que valores racionais como 0.1 não podiam ser representados exatamente em ponto flutuante binário. O resultado era uma acumulação de erros de arredondamento que destoava do esperado em até 0.03 após várias operações encadeadas. A solução que funcionou foi usar aritmética de ponto fixo com escalonamento, convertendo todos os valores para unidades menores — centavos no caso de moeda — e operando exclusivamente com inteiros. Isso eliminou o erro acumulado completamente.
Entendendo números reais inteiros e racionais
Uma fração qualquer é um número racional. Isso inclui números inteiros, porque todo inteiro pode ser escrito como uma fração com denominador 1. Um número real é racional se e somente se sua representação decimal é periódica ou terminada. A parte irracional vem dos números cuja expansão decimal nunca repete e nunca termina — como pi ou a raiz quadrada de 2. O que as pessoas frequentemente ignoram é que a classe dos racionais é densa nos reais. Isso significa que entre dois números reais quaisquer, por mais próximos que sejam, sempre existe um número racional. Na prática computacional, isso se traduz em algo importante: você nunca consegue representar um número real arbitrário com precisão infinita usando uma quantidade finita de dígitos. Cada operação de conversão entre representação decimal e binária introduz um erro de arredondamento.
👉 Clique no botão abaixo para saber mais sobre o assunto!
No campo da engenharia de software, essa limitação não é apenas teórica. Eu já vi sistemas de controle industrial que falhavam porque um sensor enviava valores em ponto flutuante e o algoritmo de decisão usava comparações de igualdade direta entre racionais aproximados. A correção foi adotar uma tolerância de comparação — um epsilon — em vez de igualdade exata, definindo o limiar com base na precisão máxima esperada do sensor, que naquele caso era de 10. O mesmo problema aparece de formas diferentes quando se trabalha com estatística. Em cálculos de média e variância, acumular somas de valores racionais em ponto flutuante sem usar algoritmos de soma compensada pode gerar perda de precisão significativa em datasets grandes. O método de duas passadas ou o algoritmo de Welford corrigem isso, e a diferença costuma ser a margem entre um resultado confiável e um totalmente distorcido.
Não existe uma solução única que funcione em todos os cenários. Se você precisa de exatidão matemática absoluta, como em criptografia ou cálculos financeiros regulamentados, frações simbólicas ou bibliotecas de aritmética racional são o caminho. Se o foco é performance e a tolerância a erro é aceitável, ponto flutuante com boas práticas de arredondamento resolve. A escolha depende do que está sendo construído e do quanto de imprecisão o sistema aguenta antes de produzir resultados errados.