Weaknesses of type CWE-1339

1 result

Imprecisão ou inexatidão em operações com números reais

É quando o código usa números de ponto flutuante (float, double) para cálculos que exigem precisão exata, causando erros de arredondamento ou truncamento que podem levar a decisões incorretas. Números reais em computadores não são perfeitos: operações matemáticas acumulam pequenos erros que, dependendo do contexto (segurança, cálculos críticos), podem ser explorados ou causar comportamento não previsto.

Example

Um sistema de pagamento que usa double para calcular juros ou descontos pode acumular erros de centavos ao processar milhares de transações; ou um validador de segurança que compara floats diretamente (ex: `if (valor == 0.1`) pode falhar porque 0.1 não é representável exatamente em binário, deixando passar verificações que deveriam bloquear.

How to mitigate

Use tipos de precisão fixa (BigDecimal em Java, Decimal em Python) para cálculos financeiros e críticos; evite comparações diretas de igualdade em floats (use margem de tolerância); valide e trate explicitamente erros de arredondamento em lógica sensível a segurança.