Por que computadores chupam matemática?
NotíciaOs computadores podem ter dificuldade em exibir um comportamento inteligente, mas a realização cega de cálculos aritméticos é certamente seu ponto forte. Ou é?
O fracasso da calculadora on-line do Google e a aparente incapacidade do Excel de dar respostas corretas a cálculos simples são problemas bem conhecidos entre os programadores, mas não são realmente bugs no sentido normal da palavra. Em vez disso, eles são apenas uma conseqüência do fato de que os computadores são uma droga na matemática.
Computadores realizam cálculos de maneira bastante diferente dos métodos que os humanos usam para fazer aritmética - e isso significa que eles habitualmente chegam à resposta errada. Aqui nós investigamos algumas das consequências chocantes desta revelação antes de investigar a razão pela qual os computadores sugam as matemáticas..
- 10 teorias conspiratórias de computação examinadas
Fechar não está perto o suficiente
Para alguém ainda estar convencido de que os computadores não podem ter aritmética simples, vamos começar com alguns exemplos que você pode experimentar.
Primeiro, a calculadora do Google. Se você nunca experimentou antes, para ter uma ideia de como funciona, navegue até www.google.co.uk, digite 5 * 9 + (sqrt 9) ^ 3 na caixa de pesquisa e clique em "Pesquisar" . Você verá que ele retorna com a resposta correta: '5 * 9 + (sqrt 9) ^ 3 = 72'.
Agora vamos tentar outro cálculo. Digite 599.999.999.999.999 - 599.999.999.999.998. Muito claramente, isso deve dar uma resposta de 1. Inacreditavelmente, no entanto, o Google responde com isso: '599.999.999.999.999 - 599.999.999.999.998 = 0'. Apenas um exemplo raro e infeliz, talvez?
OK, então vamos tentar outro cálculo simples. Digite = 850 * 77.1 na célula A1 de uma pasta de trabalho do Excel 2007 (ele não funciona - ou deveria ser que funcione - em versões anteriores do Excel). Um pouco de aritmética mental sugere que a resposta deveria estar na região de 60.000; na verdade, a resposta correta é 65.535.
O Excel tem outras ideias. Ele irá dizer-lhe que o resultado desta multiplicação é de 100.000, o que é um enorme 34.465. E para provar que isso não é flash na panela, que tal usar uma seleção de calculadoras online para trabalhar 1.0 - 0.9 - 0.1?
Você provavelmente vai encontrar pelo menos metade deles vai chegar com uma resposta de -2.77555756 E-17 - notação científica para -0.0000000000000000277555756. (Se todos os que você tentar dar a resposta certa, dê uma olhada em www.calculator.net.)
MATHS MAUS: Como 1.0 - 0.9 - 0.1 é igual a 0, por que tantas calculadoras online estão convencidas de que esse valor é a resposta??
OK, esta resposta pode não estar muito longe da resposta correta de 0, mas por que a calculadora não consegue encontrar a resposta certa - uma resposta que é descaradamente óbvia para qualquer pessoa que esteja familiarizada com a simples aritmética??
Como os computadores fazem matemática
Embora os computadores possam manipular inteiros (números inteiros), para aritmética de uso geral, eles armazenam números no formato de ponto flutuante, porque é muito mais eficiente no uso da memória..
Vamos pegar a representação de ponto flutuante de precisão dupla como exemplo. Ele usa 64 bits para armazenar cada número e permite valores de cerca de -10308 a 10308 (menos e mais 1 seguido por 308 zeros, respectivamente) a serem armazenados. Além disso, valores fracionários tão pequenos quanto mais ou menos 10-308 (que é um ponto decimal seguido por 307 zeros e depois um 1) podem ser armazenados.
Em contraste, se os mesmos 64 bits fossem usados para armazenar inteiros, o intervalo seria −9.223.372.036.854.775.808 para +9.223.372.036.854.775.807, e os valores fracionários não puderam ser representados.
O segredo para essa eficiência aparentemente surpreendente é a aproximação. Desses 64 bits, um representa o sinal (portanto, se o valor é positivo ou negativo), 52 bits representam a mantissa (os números reais) e os 11 bits restantes representam o expoente (quantos zeros existem ou onde o ponto decimal é).
Portanto, embora um intervalo muito maior de números possa ser armazenado usando notação de ponto flutuante, a precisão é menor do que pode ser obtida no formato inteiro, uma vez que apenas 52 bits estão disponíveis. Na verdade, 52 bits de informação binária representam um número decimal de 16 bits, portanto, quaisquer valores que diferem apenas em seu décimo sétimo ponto decimal serão realmente vistos como idênticos..
A situação com o Google pensando que 599.999.999.999.999 - 599.999.999.999.998 é igual, embora seja evidente que a calculadora do Google usa menos do que os 52 bits normais para a mantissa. O fato de algumas calculadoras darem um resultado diferente de zero para o cálculo 1.0 - 0.9 - 0.1 pode parecer diferente, já que parece que não estamos nem perto do limite da aritmética de ponto flutuante de 64 bits.
Mas isso está esquecendo um fato importante - que os computadores funcionam em binário. E, embora 0,1 possa ter apenas um dígito significativo em decimal, em notação binária, a mantissa é uma sequência repetitiva. Isso significa que 0.1 nunca pode ser representado com precisão em binário, não importa quantos bits você use.