1 Bilhão Dividido Por 3
O problema que ninguém te conta sobre divisão exata
Quando você divide 1 bilhão dividido por 3, o resultado é 333.333.333,3333... e isso parece simples até precisar aplicar em algo real. Eu trabalhei em um projeto de split de carga entre três data centers onde precisei fazer essa conta com precisão. O problema não era a matemática em si, mas sim o que acontecia quando você tentava repassar esse valor para sistemas que só lidam com inteiros ou com duas casas decimais fixas. A resposta curta é 333.333.333 vírgula 333 repetindo infinitamente. Em notação decimal, escrevemos como 333.333.333,\overline{3}. O dígito 3 se repete para sempre. Isso significa que qualquer sistema que tente armazenar esse valor com precisão finita vai ter que arredondar ou truncar, e é aí que os erros começam a aparecer. Na prática, a maioria das pessoas vai arredondar para 333.333.333,33 ou apenas 333.333.333, dependendo do contexto. Mas o verdadeiro problema surge quando você precisa que três partes iguais, somadas, resultem exatamente no valor original. Se você dividir 1 bilhão em três parcelas de 333.333.333 e somar, chega a 999.999.999. Sobra 1. Esse 1 sobrando é o tipo de coisa que passa despercebido até um relatório de auditoria apontar que o saldo não fecha.
Eu me deparei com isso em um sistema de rateio de custos onde três filiais deveriam receber partes iguais de um orçamento mensal de 1 bilhão. O desenvolvedor do sistema simplesmente fez a divisão com ponto flutuante e arredondou para baixo em cada cota. No fim do mês, o sistema exibia um saldo em conta contábil de 1 unidade monetária sem dono. Parecia bobagem, mas em volume anual isso virava uma discrepância que precisava de ajuste manual em todos os fechamentos. A correção foi fazer as duas primeiras cotas iguais ao quociente inteiro da divisão e atribuir o resto (neste caso, 1) automaticamente para a terceira cota. Dessa forma, a soma sempre batia exatamente com o total. O truque que eu uso e recomendo é simples e funciona para qualquer divisão inteira que precise ser repartida em N partes iguais sem perda. Você calcula o quociente inteiro usando divisão de inteiros e o resto usando módulo. Cada parte recebe o quociente, e as unidades restantes são distribuídas uma a uma nas primeiras N-resto partes. Se o resto for zero, todas as partes são exatamente iguais. Se o resto for maior que zero, as primeiras partes do array recebem +1 até o resto se esgotar. No caso de 1 bilhão dividido por 3, o quociente é 333.333.333 e o resto é 1. Então duas partes ficam com 333.333.333 e uma parte fica com 333.333.334. A soma é exatamente 1.000.000.000. Um detalhe importante que poucos consideram: em linguagens como JavaScript, a divisão com ponto flutuante pode produzir resultados estranhos por causa da precisão limitada do formato IEEE 754. O número 1.000.000.000 / 3 em JavaScript retorna algo como 333333333.3333333, mas se você multiplicar esse resultado por 3 de volta, pode não recuperar exatamente 1.000.000.000 por causa de imprecisões de arredondamento binário. Para valores financeiros ou contábeis, sempre use BigInt, bibliotecas de dinheiro como o decimal.js, ou trabalhe com inteiros representando a menor unidade (centavos, por exemplo) desde o início.
Outro cenário onde esse problema aparece com frequência é em partição de dados. Imagine que você tem 1 bilhão de registros e quer distribuir em três partições balanceadas. Usar a lógica de quociente mais distribuição do resto garante que nenhuma partição tenha diferença maior que 1 registro em relação às outras. Isso é diferente de simplesmente usar math.floor() em todas, o que deixaria a última partição sempre com sobra. Se o seu contexto for puramente matemático e não precisar de integridade contábil, usar 333.333.333,33 por parcela já resolve na maioria das vezes. A diferença é de aproximadamente 0,01 por parcela, que some a 0,03 no total. Para a maioria das aplicações internas, esse desvio é irrelevante. O problema é quando você tem milhares ou milhões dessas operações empilhadas, como em cálculos de juros compostos sobre cotas fracionárias ou em simulações de carregamento distribuído. Resumindo o essencial: 1 bilhão dividido por 3 é 333.333.333,\overline{3}. Arredonde conforme sua necessidade, mas se for dividir um total inteiro em três partes que precisam somar exatamente o original, use a técnica de quociente com distribuição do resto. Isso elimina o problema do valor órfão que aparece em relatórios e quebra a confiança de quem conserta o sistema depois.
Galeria
-
1 bilhão dividido por 3? - Memes -
1 bilhão dividido por 3? - Memes -
UM MILHÃO DIVIDIDO POR TRÊS | 1 MILHÃO ÷ 3 | 1.000.000 ÷ 3 | 1000000/3 ... -
1 MINUTO PARA APRENDER DIVISÃO POR 3 | COMO CALCULAR 150 DIVIDIDO POR 3 ...