Segundo o professor Carlos Yujiro Shigue (2009), "o Cálculo Numérico consiste na obtenção de soluções aproximadas de problemas de Álgebra Linear e Não-Linear, Estatística e Análise de Dados, Cálculo Diferencial e Integral e outros métodos matemáticos, utilizando métodos numéricos. Com a popularização de computadores de baixo custo e de alta capacidade de processamento, praticamente todas as atividades de Engenharia tem feito uso cada vez mais intensivo dos métodos e técnicas computacionais na resolução de problemas reais, para os quais as soluções manuais são impraticáveis e/ou imprecisas".
No entanto, o professor também chama a atenção para alguns problemas relacionados à aritmética computacional:
- "No computador, geralmente, a quantidade de operações aritméticas que se pode realizar é muito maior do que aquelas realizadas manualmente, de forma que o erro de arredondamento do dispositivo de cálculo se torna importante".
- "No computador não temos como checar cada operação, tendo em vista a velocidade com elas são realizadas e também pela quantidade, que impossibilita a conferência dos resultados das operações aritméticas".
O professor Shigue mostra um exemplo de problema usando linguagem C:
void main()
{
int i;
float soma = 0.;
for(i=1;i<=10000;i++)
soma = soma + .0001;
printf("Soma = %10.7f", soma);
}
Veja, estamos somando 1 milionésimo mil vezes. Bem, 1000 X 0,001 = 1, certo? Por isso, o código acima deveria, teoricamente, imprimir o número 1, com sete zeros na parte fracionária. Mas em vez disso, segundo o professor, ele imprime 1.0000535.
Eu fiz um teste criando um programa com o código acima. Compilei com o gcc 5.4.0 em uma máquina com Ubuntu 16.04. É claro que acrescentei no início a importação #include <stdio.h>, que o professor omite em sua nota de aula. Sem essa linha o código não funciona.
Bem, eu obtive como resultado exatamente 1.0000535, confirmando o que o professor disse.
Bem, meus amigos, tenho que lhes dizer que isso não acontece em PHP e Python.
Fiz o código equivalente em PHP:
<?php
$soma = 0;
for($i=1;$i<=10000;$i++)
$soma = $soma + (float) 0.0001;
printf("Soma = %10.7f", $soma);
Executei esse código com o PHP 7.0.8 e o resultado foi este: 1.0000000
Fiz o código equivalente em Python:
soma = 0.0;
for i in range(1,10001):
soma = soma + 0.0001
print "Soma = %10.7f" % soma
Executei esse código com o Python 2.6.5 e o resultado foi este: 1.0000000
Ora, vejam só! PHP e Python são mais precisos que a linguagem C!
É claro! Eles são escritos em C, mas aprimoram os recursos dela.
Bem, para quem achava que PHP e Python não serviam para computação científica, se quiser envie uma mensagem perguntando como se resolvem problemas de matemática computacional com essas duas linguagens livres e podemos publicar outros artigos.
Até lá.
Referência:
Shigue, C. Y. Notas de Aula. Disponível em http://www.alunos.eel.usp.br/numerico/notas.html. Acesso em 13/04/2011.
Nenhum comentário:
Postar um comentário