calculo do tempo ???

Java

09/04/2009

Alguem sabe como faço para calcular o tempo que demora para realizar um calculo em meu programa? Ele mostra o equivalente de fibonacci para o numero digitado pelo usuario, e quando o numero passa de 40 o tempo de calculo é grande, eu gostaria de calcular esse tempo. se alguem puder me ajudar!!!
Lpuga

Lpuga

Curtidas 0

Respostas

Lucas Teixeira

Lucas Teixeira

09/04/2009

[quote="lpuga"]Alguem sabe como faço para calcular o tempo que demora para realizar um calculo em meu programa? Ele mostra o equivalente de fibonacci para o numero digitado pelo usuario, e quando o numero passa de 40 o tempo de calculo é grande, eu gostaria de calcular esse tempo. se alguem puder me ajudar!!!
System.currentTimeMillis() (verifica se é este o nome) pegue o tempo do sistema antes de comecar a calcular, pegue o tempo depois que terminar, subtraia os valores e barabing!
GOSTEI 0
Moacy Jr.

Moacy Jr.

09/04/2009

faz uma busca aqui no forum que vc acha muito assunto sobre isso... quem tem que falar isso é o volnei. :D
GOSTEI 0
Marcos Pereira

Marcos Pereira

09/04/2009

Procure por um profiler, é a melhor maneira de calcular o tempo porque vai contar o tempo de CPU gasto pelo seu programa. currentTimeMillis não desconsidera o tempo que a CPU gasta com outros processos que estão rodando ao mesmo tempo na sua maquina. valeuz...
GOSTEI 0
Lpuga

Lpuga

09/04/2009

vcs naum poderiam me mostrar como fazer isso??? entedia as funções, mais naum sei usa-las em java
GOSTEI 0
Paulo Sigrist

Paulo Sigrist

09/04/2009

long init;
long end;
long diff;


init = System.currentTimeMillis();
/* Coloque aqui seu codigo que demora */
end = System.currentTimeMillis();
diff = end - init;
System.out.println("Demorou " + (diff / 1000) + " segundos");

:!:
GOSTEI 0
Lpuga

Lpuga

09/04/2009

coloquei esse codigo mais deu um erro: end = System.currentTimeMillis(); ^ //////preciso importar alguma biblioteca especifica!? //////veja minha classe como fico, oque devo alterar: public long fibonacci (long n){ long inicio; long end; long diff; inicio = System.currentTimeMillis(); if (n == 0 || n == 1) return n; else return fibonacci (n - 1) + fibonacci (n - 2); end = System.currentTimeMillis(); diff = end - inicio; System.out.println("Demorou " + (diff / 1000) + " segundos"); }
GOSTEI 0
Carlos Heuberger

Carlos Heuberger

09/04/2009

Qual foi o erro que deu? []]]
GOSTEI 0
Lpuga

Lpuga

09/04/2009

unreachable statement end = System.currentTimeMillis(); ^ missing return statement } esse erro que ocorreu !
GOSTEI 0
Paulo Sigrist

Paulo Sigrist

09/04/2009

mas eh claro que vai dar erro... olhe eu codigo....
public long fibonacci (long n){
long inicio;
long end;
long diff;

inicio = System.currentTimeMillis();

if (n == 0 || n == 1)
return n;
else
return fibonacci (n - 1) + fibonacci (n - 2); // <---- SEU ERRO ESTA AQUI!!

end = System.currentTimeMillis();
diff = end - inicio;
System.out.println("Demorou " + (diff / 1000) + " segundos");
}
Voce esta mandando retornar jah o valor... nunca vai ser executado o codigo abaixo desses if/else eh disso que o compilador esta reclamando. faca assim:
public long fibonacci (long n){
long inicio;
long end;
long diff;
long r;
inicio = System.currentTimeMillis();

if (n == 0 || n == 1)
r = n;
else
r = fibonacci (n - 1) + fibonacci (n - 2); 

end = System.currentTimeMillis();
diff = end - inicio;
System.out.println("Demorou " + (diff / 1000) + " segundos");
return r;
}
GOSTEI 0
Lpuga

Lpuga

09/04/2009

fiz exatamente como vc me passou, mais o tempo naum esta sendo contado, sempre o tempo da 0 segundos, mesmo quando demora varios minutos e apresenta 0 segundos!!!
GOSTEI 0
Paulo Sigrist

Paulo Sigrist

09/04/2009

poste seu codigo de novo
GOSTEI 0
Dadario

Dadario

09/04/2009

Poxa... Que coisa heim... Vamos entender o código e arrumá-lo Lista de fazeres: 1- criar uma classe que execute o Fibonacci 2- criar um método de execução da classe 3- criar método que calcula Fibonacci 4- colocar o medidor de tempo no código
 // Passo 1
public class Fibonacci {

  // Passo 2
  public static void main(String[] argumentos) {

    Fibonacci fibo = new Fibonacci();

    // Passo 4     
    long inicio = System.getCurrentTimeMillis(); 
    fibo.calcula(10);
    long fim = System.getCurrentTimeMillis();

     System.out.println("O tempo gasto foi: " + ((fim - inicio) /1000) + " segundos");
  }
   
   // Passo 3
  public int calcula(int numero) {
     if (numero == 0 || numero == 1) { return numero;}
     return calcula(numero - 1) + calcula(numero - 2);
  }
}
Veja se agora funciona :wink: :wink: :wink: :wink: :wink:
GOSTEI 0
Carlos Heuberger

Carlos Heuberger

09/04/2009

duas sugestoes: [list=1][*:4dd3cc9f35]nao divida por 1000 e sim por 1000.0 (real em vez de inteiro) por causa do arredondamento [*:4dd3cc9f35] use System.nanoTime() em vez do currentTimeMillis() (e divida por 1000000.0 para obter milisegundos) [/list] []]]
GOSTEI 0
Lucas Teixeira

Lucas Teixeira

09/04/2009

[quote="simu"]use System.nanoTime() em vez do currentTimeMillis() (e divida por 1000000.0 para obter milisegundos)
É bom deixar claro que este método é do Java 5 :!:
GOSTEI 0
Carlos Heuberger

Carlos Heuberger

09/04/2009

verdade... se nao tiver o java 5, pode usar o currentTimeMillis, mas chame o seu metodo varias vezes (num loop com talvez 100 ou mais interacoes) para obter um tempo um pouco maior. []]]
GOSTEI 0
Lpuga

Lpuga

09/04/2009

agora deu certo..., vcs acham que eu devo mandar o codigo intero como ficou, pra caso alguem futuramente tiver duvida ver!!??? ou mesmo o programa de fibinacci!!! :o
GOSTEI 0
POSTAR