Nem todos os aspectos não intencionais ou indesejáveis do comportamento do software são erros. O importante é garantir que o software tenha uma gama útil e documentada de condições nas quais pode confiar para operar de maneira útil. Considere, por exemplo, um programa que deve aceitar dois números, multiplicá-los e gerar os resultados e que gera um número falso se o resultado for maior que 9,95, mas menor que 10,00, maior que 99,95, mas menor que 100,00, etc. Se o programa foi escrito com a finalidade de processar números cujo produto estava entre 3 e 7 e nunca será chamado a processar outros, fixar seu comportamento com 9,95 não o tornaria mais útil para o objetivo a que se destina. Pode, no entanto, tornar o programa mais adequado para outros fins.
Em uma situação como a acima, haveria dois cursos de ação razoáveis:
Corrija o problema, se isso for prático.
Especifique os intervalos nos quais a saída do programa seria confiável e declare que o programa é adequado apenas para uso em dados conhecidos por produzir valores dentro de intervalos válidos.
A abordagem nº 1 eliminaria o erro. A abordagem nº 2 pode tornar o progresso menos adequado para alguns propósitos do que poderia ser, mas se não houver necessidade de programas lidar com os valores problemáticos que podem não ser um problema.
Mesmo que a incapacidade de manipular os valores 99,95 a 100,0 corretamente seja resultado de um erro de programação [por exemplo, decidir imprimir dois dígitos à esquerda do ponto decimal antes de arredondar para um lugar depois, produzindo 00,00], isso deve ser considerado apenas um bug se o programa seria especificado como produzindo uma saída significativa nesses casos. [Aliás, o problema mencionado ocorreu no código Turbo C 2.00 printf; nesse contexto, é claramente um bug, mas o código que chama o printf defeituoso só seria incorreto se pudesse produzir resultados nos intervalos problemáticos].