Jump to content

Calcular o tempo que leva o computador a contar de 1 até 100 000 000


msmsms
 Share

Recommended Posts

Boa tarde

Tenho de criar uma função para calcular o tempo que um repetidor leva a contar números inteiros de 1 até 100 000 000 (100 milhões)

Tive a ideia de fazer um repetidor FOR mas não sei fazer a contagem do tempo e nem sei se é possível fazer uma estimativa sem que seja preciso fazer o repetidor ir de 1 até 100 000 000 milhões,

Existe algum atalho que me permita obter o output mais cedo ou tenho mesmo de fazer o FOR de 1 até 100 000 000 e esperar?

Ainda que tenha de esperar qual método do python me permite ir contando o tempo,

Tenho estado a estudar a função time só que ainda não se fez luz.

Segue o código que tenho feito até este momento.

 

def calcular_tempo():
    for i in range (1, 100000000):
        print (i)
    
calcular_tempo()

 

 

 

 

 

 

Link to comment
Share on other sites

AshKetshup

Boa tarde @msmsms,

Consegues usar o modulo time:

import time

E antes de começares a contagem guardares numa variavel o tempo atual e quando terminares guardares numa outra também o tempo atual:

def calcular_tempo():
  inicio = time.time()
  for i in range(0, 100000000):
    print(i)
  fim = time.time()
  
  # Podes retornar o valor calculado e usar posteriormente:
  return fim - inicio
  # Ou então podes mostrar no ecrã:
  print("O tempo que demorou foi: " + (fim - inicio))

Espero ter ajudado!

Fica bem.

Edited by AshKetshup
misspelling
  • Vote 1

Mas façam o que fizerem nunca façam:

sudo apt remove python

 

Link to comment
Share on other sites

Recomendaria não fazer o output.

A operação de output tem um custo elevado em termos de desempenho e irá produzir um tempo bastante maior do que se o ciclo for percorrido sem ela.

def calcular_tempo():
  inicio = time.time()
  for i in range(0, 100000000):
    continue    # <--- NÃO fazer output
  fim = time.time()
  
  # Podes returnar o valor calculado e usar posteriormente:
  return fim - inicio

Cumprimentos.

  • Vote 1

Knowledge is free!

Link to comment
Share on other sites

Rui Carlos
19 minutos atrás, thoga31 disse:

Recomendaria não fazer o output.

A operação de output tem um custo elevado em termos de desempenho e irá produzir um tempo bastante maior do que se o ciclo for percorrido sem ela.

def calcular_tempo():
  inicio = time.time()
  for i in range(0, 100000000):
    continue    # <--- NÃO fazer output
  fim = time.time()
  
  # Podes returnar o valor calculado e usar posteriormente:
  return fim - inicio

Cumprimentos.

Esperaria que o compilador fosse suficientemente inteligente para passar o ciclo à frente nesse caso (pelo menos numa linguagem como o C seria).  Convém ter alguma computação rápida, mas não trivial no ciclo (algo como x = (x + i) % 2 deve ser suficiente), e no final fazer output do valor.  .

Link to comment
Share on other sites

Obrigado a todos.

1- Acham que consigo obter o tempo final em 24h com python sem fazer o print?

2 - Porquê que no final se tem de fazer a conta de (fim - inicio) e não apenas imprimir o valor de fim. o tempo não é unicamente expresso em segundos mas sim horas. minutos e segundos?

quando faço:

import time
inicio = time.time()
print(inicio)

O valor que é apresentado na consola é: 1631039120.337897

Presumo que seja segundos certo?

 

 

Link to comment
Share on other sites

1 hora atrás, msmsms disse:

Porquê que no final se tem de fazer a conta de (fim - inicio) e não apenas imprimir o valor de fim.

Não basta saber a que horas o processo acabou para saber quanto tempo demorou. O tempo que demora é a diferença (subtração) entre a hora em que acabou (fim) e a hora em que começou (inicio).

Eu agora digo-te que o meu processo acabou às 20:15:34 e pergunto-te quanto tempo demorou. Como sabes a resposta se eu não te disser quando arranquei o processo?

 

Knowledge is free!

Link to comment
Share on other sites

Esqueci-me de responder ao resto.

1 hora atrás, msmsms disse:

Acham que consigo obter o tempo final em 24h com python sem fazer o print?

Acabei de testar e demorou cerca de 8 segundos no meu computador (usando o cálculo proposto pelo @Rui Carlos para usar no ciclo).

P.S.: Usando continue ao invés do cálculo, demorou cerca de 1 segundo e meio. O interpretador de Python não aparenta optimizar, pelo que assim simplificamos as operações Assembly realizadas ao mínimo essencial de iterar um contador.

 

1 hora atrás, msmsms disse:

Presumo que seja segundos certo?

As unidades do valor são segundos, sim.

 

Edited by thoga31
Adição de P.S.

Knowledge is free!

Link to comment
Share on other sites

AshKetshup

Acrescentando ao que o @thoga31 disse:

O que a função time.time() nos dá é o numero de segundos que passou desde o epoch (corresponde a 1 de Janeiro de 1970) foi definido por Dennis Ritchie e Ken Thompson que construiram o sistema UNIX.

Para obteres o tempo que passou entre 2 momentos tens de subtrair o tempo final pelo tempo inicial.

Se quiseres aprender mais sobre o epoch tens aqui o link:
https://www.maketecheasier.com/what-is-epoch-time/

Edited by AshKetshup

Mas façam o que fizerem nunca façam:

sudo apt remove python

 

Link to comment
Share on other sites

Muito obrigado

Aqui com o meu CPU levou 3 segundos mas acho bastante estranho que a aplicação tenha passado por 100 000 000 números em tão pouco tempo.

Esperava que levasse várias horas,

Link to comment
Share on other sites

3 horas atrás, Rui Carlos disse:

Esperaria que o compilador fosse suficientemente inteligente para passar o ciclo à frente nesse caso (pelo menos numa linguagem como o C seria).  Convém ter alguma computação rápida, mas não trivial no ciclo (algo como x = (x + i) % 2 deve ser suficiente), e no final fazer output do valor.  .

Não consegui captar bem o que é o teu valor da variável x

e como essa expressão se relaciona com o tempo...

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.