Gå til innhold

Ta tiden på en funksjon


Anbefalte innlegg

Skrevet

Driver å lager et program for å regne ut kvadratroten av et tall uten å bruke sqrt()-funksjonen.

 

For å ta tiden på denne funksjonen, har jeg brukt time(0) før og etter funksjonen begynner og så trukket de fra hverandre.

Problemet er bare at denne funksjonen ikke måler lavere enn i sekunder,

og funksjonen bruker jo ikke så lang tid på å regne det ut.

 

Er det noen som vet om en funksjon som måler millisekunder,

eller eventuelt en annen måte å gjøre dette på?

Videoannonse
Annonse
Skrevet (endret)

Regner med at det egentlig ikke er dette du er ute etter men.

Hvis du har wxWidgets satt opp går det ann å bruke disse funksjonene:

::wxStartTimer

void wxStartTimer()

 

Starts a stopwatch; use ::wxGetElapsedTime to get the elapsed time.

 

See also wxTimer.

 

Include files

 

<wx/timer.h>

og

::wxGetElapsedTime

long wxGetElapsedTime(bool resetTimer = true)

 

Gets the time in milliseconds since the last ::wxStartTimer.

 

If resetTimer is true (the default), the timer is reset to zero by this call.

 

See also wxTimer.

 

Include files

 

<wx/timer.h>

 

Edit: Skrevet litt feil.

Endret av zirener
Skrevet

hvis du bruker windows og vil ha høyest mulig oppløsning kan du bruke QueryPerformanceCounter og QueryPerformanceFrequency. se på msdn.microsoft.com hvordan du bruker de

Skrevet

i 'time.h' fins det en funksjon kalt clock_t.

 

#include <iostream> // for cout og endl
#include <time.h>  // for clock_t og clock()

using namespace std;

int main()
{
   // Variabler   
   char test[100000];
   clock_t start;
   clock_t end;    
   // Operasjoner
   start = clock();
       cout << "Skriv: Ibsens ripsbusker og andre buskvekster " << endl;
       cin >> test;
   end = clock();
   cout << "Det tok " << (end-start) 
   << " millisekunder å utføre operasjonen" << endl;
   cout << "Skriv ett eller annet og trykk ENTER for å avslutte!" << endl;
   int a; cin >> a;
   return 0;
}

:)

Skrevet
i 'time.h' fins det en funksjon kalt clock_t.

hmm.

Synes den der var litt rar.

På små tall bruker den 0 (millisekunder?) og på litt større tall bruker den

feks. 10000, 20000 eller andre x*10^5 antall (millisekunder?)

Skrevet (endret)

den tar tiden på hvor lang tid prosessoren din bruker for å prosessere tallene... ergo vil små tall ta liten tid og større tall ta lengre tid :roll:

 

Edit: millisekunder ja

Endret av Vial
Skrevet
den tar tiden på hvor lang tid prosessoren din bruker for å prosessere tallene... ergo vil små tall ta liten tid og større tall ta lengre tid :roll:

 

Edit: millisekunder ja

Selvfølgelig, men jeg synes det var litt rart at den, hvis den ikke bruker 0 millisekunder, alltid bruker x*10^5 sekunder på en operasjon,

og aldri tall som f.eks. 17352 millisekunder.

Hvis den ikke kan gi mer nøyaktige tall en x*10^5, kan jeg jo like godt bruke

en funksjon som teller sekunder, som vil gi 10 ganger så nøyaktig svar.

Skrevet

i never said it was perfect :)

men du har et poeng ja. Løsningen er selvfølgelig å lage en egen timer som måler mer nøyaktig. Kanskje jeg mixer opp noe i morgen :)

Skrevet

Den beste måten å måle tiden på en funksjon er vel å putte den i en loop som kjører den gjentatte ganger og så dele resultatet på antall ganger den blir loopet.

For å ta hensyn til loop overhead kan du jo også kjøre loopen tom, og trekke dette resultatet fra det andre.

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...