terça-feira, 14 de fevereiro de 2017

PHP e Python para Universitários - aula zero

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