Mostrando postagens com marcador fortran iniciantes. Mostrar todas as postagens
Mostrando postagens com marcador fortran iniciantes. Mostrar todas as postagens

terça-feira, 11 de outubro de 2011

Como determinar se um número é PAR ou ÍMPAR em FORTRAN

Acredito que a forma mais fácil de determinar se um número é PAR ou ÍMPAR em FORTRAN é utilizando a função intrínseca MOD(.), que retorna o resto de uma divisão. Se o resto de uma divisão por 2 é igual a zero, o número é par, se é igual a um, o número é ímpar.
Nesse caso, para determinar se X é par, tem-se:

!PARA O CASO DE X REAL:
IF ( MOD( X , 2.D0) == 0 ) THEN  !  ->  X é PAR!

!PARA O CASO DE X INTEIRO:

IF ( MOD( X , 2) == 0 ) THEN  !  ->  X é PAR!

Caso contrário, X é ÍMPAR.

domingo, 13 de dezembro de 2009

MATLAB versus FORTRAN - 1 - somatório simples

Pretendo fazer algumas comparações entre MATLAB e FORTRAN, e este é o primeiro post com tal objetivo. Dois aspectos principais serão verificados: a quantidade de linhas do código fonte, que se relaciona com a facilidade de escrita na linguagem, e o tempo de processamento, que está diretamente vinculado ao tempo de execução. Como se sabe, o MATLAB, por ser uma linguagem interpretada (sem geração de código executável) tende a ser mais lento, no entanto, existem muitas facilidades no mesmo que diminuem o tempo de programação requerido.


No intuito de medir o tempo nos dois ambientes sem que haja muita diferença no método de medição, optou-se por utilizar as funções tic e toc, no MATLAB, e a função TIMEF() do FORTRAN (biblioteca DFPORT). A descrição destas funções é a seguinte:





O primeiro exemplo é um somatório simples, para i variando de 1 a 1 bilhão, conforme o código abaixo (em MATLAB):



j=0;
tic
for i=1:1000000000
j=j+1;
end
toc

O número de linhas do código fonte foi de 6 linhas para o MATLAB contra 10 linhas do FORTRAN (sem contar cabeçalho e finalização da função).



O tempo médio de execução para 10 repetições é mostrado a seguir:

Verificou-se que, para este exemplo, o MATLAB foi quase duas vezes mais lento que o FORTRAN.






segunda-feira, 19 de outubro de 2009

Overflow condition - números inteiros em Fortran

Uma pequena explicação sobre números inteiros e "overflow condition".
A chamada overflow condition ocorre quando se tenta armazenar numa variável do tipo inteiro um número maior que o valor máximo possível ou menor que o valor mínimo possível.
Esses limites existem pois, quando declaramos uma variável, um determinado espaço de memória é reservado para guardar o valor da tal variável.
Considerando um inteiro de n bits, usualmente o menor número que pode ser armazenado é dado por:
menor_valor_inteiro = -2**(n-1)
e o maior valor é dado por:
maior_valor_inteiro = 2**(n-1) -1 !(O '-1' é o espaço reservado ao zero) .

O tipo mais comum de inteiros nos computadores de hoje em dia são os inteiros de quatro bytes (1 byte = 8 bits; 4 bytes = 32 bits), que, portanto, podem armazenar qualquer número inteiro entre -2,147,483,648 e 2,147,483,647.

Portanto, se você tiver problemas com overflow condition, a solução pode ser simplesmente ter que trocar um INTEGER por um INTEGER*8.

terça-feira, 4 de agosto de 2009

Programa para renomear projetos: Compaq Visual Fortran 6.6

Depois de ter perdido muito tempo procurando como renomear um projeto dentro do Compaq Visual Fortran 6.6 e não conseguindo, terminei por descobrir uma forma de renomear o projeto fora do mesmo. O processo é bastante simples, mas decidi fazer um programa para torná-lo ainda mais fácil e rápido.
O pequeno programa, que trabalha em cima dos arquivos .dsw e .dsp, deve ser copiado para a pasta onde se encontram os arquivos .dsw e .dsp do projeto que se deseja renomear e lá executado. Depois de pedir o nome atual do projeto e o novo nome, o programa cria dois novos arquivos (um .dsw e um .dsp) com o novo nome. Verifique se está tudo ok com o projeto renomeado abrindo-o (abra o workspace '.dsw' no Developer Studio). Se tiver dado tudo certo você pode deletar os antigos arquivos .dsw e .dsp.

OBS.: É recomendável fazer um backup do projeto antes de utilizar este programa, pois o mesmo não foi testado exaustivamente, tendo sido feito apenas para suprir a necessidade do próprio autor.


Faça aqui do download do programa (450Kb), pelo rapidshare.


P.S.1: Caso você, leitor, se interesse pelo código fonte deste pequeno programa, deixe seu comentário neste post. Posso disponibilizar o projeto completo posteriormente.

sexta-feira, 31 de julho de 2009

ERROS COMUNS: Exponenciação - número negativo elevado a um potência real

Sabe-se que a expressão:
y = x ** n,
onde y e x são reais, e n é um inteiro, equivale a simplesmente multiplicar x por ele mesmo n vezes, e é isso exatamente que o computador faz ao encontrar uma expressão desse tipo.

No entanto, quando se tem algo do tipo:
y = x ** z,
onde y, x e z são reais, z pode ser igual a, por exemplo, 2.5. É fisicamente impossível multiplicar um número por ele mesmo 2.5 vezes, e portanto é necessário recorrer a métodos indiretos para calcular x ** z. O método mais comum para este caso é o seguinte:
x ** z = exp(z*ln(x)).
Portanto, como não existe logaritmo natural de número negativo, o seguinte "ERRO" pode ocorrer:
(-2.0)**(2.5) = NaN (Not a number)
( 2.0)**(2.5) = 5.656854.

ERROS COMUNS: Divisão em "modo misto"

Um erro bastante comum, do qual eu e alguns colegas já fomos vítimas, é a divisão envolvendo reais e inteiros. De uma forma geral, as expressões em "modo misto" devem ser evitadas, visto que são relativamente difíceis de entender e podem levar a resultados diferentes dos desejados.

Em operações aritméticas entre um número real e um inteiro, o inteiro é convertido para real pelo computador e o resultado é do tipo real.
Isso explica porque:
(1 + 1/2) = 1
(1. + 1/2) = 1.0
(1 + 1./2) = 1.5
(1 + 1/2.) = 1.5
No primeiro e no segundo caso ocorre que 1/2 = 0, por se tratar de uma divisão entre dois números inteiros. No terceiro e no quarto casos, 1./2 = 1/2. = 0.5, o inteiro é convertido para real e a aritmética para números reais é utilizada.

Portanto, é necessário ter atenção redobrada para casos tais como:
(2**(1/2)), que resulta igual 1, diferentemente de
(2**(1./2)) ou (2**(1/2.)), cujo resultado é 1.414214...

terça-feira, 9 de junho de 2009

Apostilas básicas de FORTRAN.

Cinco apostilas de FORTRAN básico para download em um arquivo zipado (950KB):

http://rapidshare.com/files/1523197554/Apostilas-FORTRAN_fortranbr.blogspot.com.zip .

quinta-feira, 21 de maio de 2009

Porque aprender FORTRAN?

Baseado nos escritos de John Mahaffy, da "Pennsylvania State University".
Outras coisa interessantes sobre FORTRAN podem ser encontradas em:
http://www.personal.psu.edu/jhm/f90/lectures/quickref.html

PORQUE aprender FORTRAN?


Primeiro aqui coloco minha tradução, e logo depois eu postarei o original, visto q meu inglês está em desenvolvimento. O texto é antigo (1997), mas interessante.

"Muitos de você têm ouvido falar hoje em dia que Fortran é uma linguagem obsoleta. Me disseram a mesma coisa quando eu comecei em 1968. A razão maior dessa noção é que as linguagens de programação são geralmente desenvolvidas e ensinadas por cientistas da computação. Fortran definitivamente não é a melhor linguagem para os tipos de aplicações encontrados na Ciência da Computação. A linguagem C foi desenvolvida para escrever sistemas operacionais, compiladores, e ourtas aplicações relacionadas. Como resultado, muitos que focaram nesses tópicos veem-na (a linguagem C) e suas relativas (C++) como as linguagens de escolha. Muitas outras linguagens tem vindo e ido através dos anos, com vários seguimentos.

FORTRAN foi desenvolvido pela IBM, especificamente para cálculos científicos. Padrões internacionais têm sido desenvolvidos e expandidos ao longo dos anos para prover uma sintax uniforme e um conjunto de funções de suporte para as necessidades de cálculo desses campos. Como resultado, a qtde de aplicações científicas e de engenharia desenvolvidas nos últimos 30 anos é imensa. Se nenhum novo programa científico fosse escrito em FORTRAN, o número de oportunidades de trabalho para suporte das aplicações existentes ainda seria imenso. Entretanto, com o desenvolvimento do padrão FORTRAN 90, Fortran continua a ser a primeira escolha para novos programas científicos..."

Até mais...