Desenvolvimento - Office

Excelram de mim: Fantasmas do Excel

Você alguma já teve a ligeira impressão que um de seus cálculos no Excel não soma ou subtrai para o valor que você espera?

por Robert Martim



Você alguma já teve a ligeira impressão que um de seus cálculos no Excel não soma ou subtrai para o valor que você espera? Se você ainda não passou por esta situação é improvável que você alguma vez tenha tido a necessidade (ou curiosidade) de expandir a precisão decimal do Excel. Ou eu poderia até dizer que você não teve o azar de cair nesta curiosa característica do Excel.

Você seria capaz de subtrair R$1.117,50 de R$1.125,80 e me dizer qual o resultado? Na matemática mundana que aprendemos na escola, você certamente dirá R$8,30. Mas e se eu te dissesse que este resultado está incorreto? Que o resultado desta subtração não é exatamente R$8,30; mas um outro número qualquer? O que você diria?

Certamente você diria que ou eu sou maluco ou devo voltar para a escola. Porém, se você efetuar o cálculo acima no Excel você verá que ele também não retorna a resposta que você acredita ser a correta. E agora? Será que todos na Microsoft erraram neste detalhe simples ou existe algo além que ainda não foi explicado?

Antes de entrar nos motivos que provam que o resultado não é exatamente R$8,30 veja a figura abaixo:


Figura 1 – Subtração incorreta ou um fantasma do Excel?

Ao efetuar a subtração o Excel retorna dois valores. O primeiro é o tal R$8,30 que você certamente encontrou e outro é um número bem próximo de R$8,3. Porém, próximo de R$8,30 não é a mesma coisa que R$8,30. Então, qual resposta está realmente correta?

A resposta está no ramo da matemática conhecida como “Cálculo”. Se você alguma vez estudou Cálculo deve ainda lembrar de “limites”. Limites são utilizados para avaliar o resultado de um cálculo (limite) quando um número X se aproxima de um outro número qualquer. Por exemplo, qual o limite de 10/X quando X se aproxima do infinito, matematicamente falando:

O que desejamos saber na fórmula acima é qual o valor que resultará da divisão do número 10 por um número X tão grande quanto o infinito. Se o número X fosse 10, o resultado seria 1 (10/10=1). Se o número X fosse 1.000.000 o resultado da divisão seria 0,00001. É fácil visualizar que quanto maior for o valor de X menor será o resultado da divisão. No limite, podemos dizer, com 100% de certeza, que o resultado será zero.

Como é impossível prever quais os números serão subtraídos ou somados em uma planilha é muito mais prático utilizar conceitos de limites para criar uma fórmula que possa efetuar tais cálculos com o máximo de precisão possível. E é exatamente isso que o Excel faz cada vez que você efetua um cálculo.

Ao observar o resultado R$8,299999999999950 podemos facilmente ver o que foi dito acima. No limite, a parte do decimal é realmente R$0,3. Ao arredondar o número 5, o primeiro 9 à esquerda passa para zero e o processo continua até que o 2 seja arredondado para 3. Observe que o resultado será verdadeiro até o décimo - quarto dígito. Se você formatasse a célula para mostrar até a décima - terceira casa decimal o resultado seria R$8,30.

Somente ao modificar a visualização para os 15 dígitos de precisão do Excel que é possível ver esta “anomalia”. Veja a figura:


Figura 2 – Diferentes precisões resultam em diferentes valores Os dois valores são resultados da mesma fórmula.

Mas de onde vem tal "anomalia"? Uma forma simples de se compreender isso é a prova de 1=0,99999... Certamente você dirá que 1 <> 0,99999... Porém, isso será verdadeiro se você considerar o valor de face dos dois números. No limite, os dois números são a mesma coisa e isso pode ser provado da seguinte forma. Se X = 0,9999... (até o infinito); então podemos representar o número 9,9999... (até o infinito) como:

10x = 9,9999... (até o infinito)

E podemos resolver a equação para x da seguinte forma:

10x - x = 9,9999... - 0.9999...
9x = 9
x = 9/9 = 1

Para você ver que este é o caso no Excel, escreva em uma coluna do Excel os números de 1 a 9. Na coluna ao lado, divida cada um destes valores por 9. Aumente a precisão dos decimais para mostrar as 14 casas decimais. Você obterá o seguinte resultado:


Figura 3 – Quando 1 = 0,99999...

Observe o que está ocorrendo com o último digito de cada divisão. Ao passo que 0,88-0,11=0,77; se você efetuar a mesma subtração baseado-se no conceito de limites no escopo acima, você obterá 0,7777777777777780.

Isso vale para somar também e será observado exatamente neste limite.

Para avaliarmos uma soma, podemos iniciar com a seguinte pergunta: se 0,99999999999999... = 1; então 99999999999999,9... + 1 = ? Faça esta conta na mão antes de tentar no Excel. Com números inteiros o resultado é bem intuitivo, coloque um decimal no final e já não é bem assim.

Agora, no Excel faça o seguinte:

A1 = 99999999999999,9
A2 = 1
A3 = A1 + A2

A figura abaixo mostra o resultado desta soma:


Figura 4 – Limites em ação

Como a precisão do Excel é de 15 casas decimais, o Excel obrigatoriamente utilizará o limite da casa decimal, isto é, 0,99999... Como 0,99999... = 1, o valor na célula A1 é, na verdade, R$100 trilhões.

Conclusão:

Este breve artigo mostra um dos vários “fantasmas” do Excel que as vezes são vistos como “bugs” mas que realmente têm um explicação lógica por trás.

Se você deseja saber mais ou tem críticas, sugestões e comentários, fale diretamente com o autor pelo e-mail rm@faircourt.com ou deixe aqui no site.

Robert Martim

Robert Martim - Formado e Pós-Graduado em Finanças pela Universidade de Londres, Reino Unido. Diretor de TI da Faircourt Capital Limited (Reino Unido). Fornece suporte pro bono em TI à entidade de caridade Nigeriana NIDOE (Nigerians in Diaspora Organisation Europe) desde 2001. Colaborador ativo do fórum Excel Avançado do site www.juliobattisti.com.br, onde divide seu conhecimento e experiência com outros membros do espaço.
Autor do livro Excel e VBA na Modelagem Financeira: Uma abordagem prática.