calculo do tempo ???
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
Curtidas 0
Respostas
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.
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
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
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
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
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
09/04/2009
Qual foi o erro que deu?
[]]]
GOSTEI 0
Lpuga
09/04/2009
unreachable statement
end = System.currentTimeMillis();
^
missing return statement
}
esse erro que ocorreu !
GOSTEI 0
Paulo Sigrist
09/04/2009
mas eh claro que vai dar erro... olhe eu codigo....
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;
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");
}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
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
09/04/2009
poste seu codigo de novo
GOSTEI 0
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
Veja se agora funciona
:wink: :wink: :wink: :wink: :wink:
// 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);
}
}GOSTEI 0
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
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
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
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