Czas wykonywania funkcji

0

Chce policzyć w milisekundach ile czasu wykonuje się funkcja. Czy takie coś będzie dobre?

czas4=clock();
wybieranie(x,tab_wyb);
czas5=clock();
cout <<"czas "<<czas5-czas4;
 
0
clock_t czas4=clock();
for(int =0;i<1000;++i) wybieranie(x,tab_wyb);
czas4=clock()-czas4;
cout <<"czas "<<czas4/1000.0/CLOCKS_PER_SEC<<" sec"<<endl;
0

Chyba coś nie tak

cout <<"czas "<<czas4/1000.0/CLOCKS_PER_SEC<<" sec"<<endl; 

Chodzilo mi o milisekundy a teraz liczba jest wyswietlana w postaci wykladniczej
Przy zapisie czas4/CLOCKS_PER_SEC chyba jest wyświetlane sekundy,milisekundy czyli samo

cout<<czas4; 

powinno wystarczyć. Dobrze rozumuje?

0

Niedobrze rozumujesz.
<<" sec"<< - Jak nie rozumiesz co to znaczy, to po prostu spytaj lub zajrzyj do googla.
Jak nie chcesz postaci wykładniczej to:
cout<<setf(ios::fixed)<<setprecision(6)<<1.25E-4<<endl;

0

A mi ciągle wydaje sie ze dobrze. Wikipedia:

Funkcja clock ( ) zwraca przybliżoną wartość czasu procesora zużytego
przez program. Wartość ta jest wyrażona w jednostkach, których
CLOCKS_PER_SEC przypada na jedną sekundę (czyli clock()/CLOCKS_PER_SEC
jest czasem wyrażonym w sekundach).

Czyli to:

 cout <<"czas "<<czas4/1000.0/CLOCKS_PER_SEC<<" sec"<<endl; 

nie jest w

_13th_Dragon napisał(a):

<<" sec"<< - Jak nie rozumiesz co to znaczy, to po prostu spytaj lub zajrzyj do googla.
jak to napisales.
Żeby były milisekundy powinno być *1000.0 a nie /1000.0.
Jeszcze jedno pytanko czy funkcja clock() zwraca czas w milisekundach?
Wszędzie jest napisane tak: "Wartością funkcji jest liczba jednostek czasu zużytych przez program".
Skoro to jest w ms:

 cout <<"czas "<<czas4*1000.0/CLOCKS_PER_SEC<<" ms"<<endl; 

a wynik jest taki sam jak przy:

 cout <<"czas "<<czas4<<endl; 

to clock() zwraca milisekundy, chyba ze jeszcze gdzies jest błąd. Mógłby wypowiedzieć się jeszcze jakiś specjalista? ;)

2

Jeśli chodzi o /1000.0, to nie wiem czy zwróciłeś uwagę, ale _13th_Dragon wprowadził jeszcze jedną modyfikację w kodzie (rzuć okiem na jego pierwszy post w tym temacie) - mianowicie wprowadził pętle, która wykonuje Twoją funkcję 1000 razy. A więc to /1000.0 jest po to, żeby obliczyć średni czas wykonania funkcji (mając czas wykonania 1000 funkcji).
(w niektórych przypadkach liczy się minimum zamiast średniej, ale ogólnie to dobry pomysł, żeby wykonać funkcję więcej razy jeśli można i uśredniać wynik)

Co do CLOCKS_PER_SEC, to nie można polegać na tym, że będzie zawsze stałe. Ale, jeśli chcesz tylko pisać na jedną platformę (np. Windowsa), to tam clock() ma stałe CLOCKS_PER_SEC w zasadzie dla całej platformy.

Jeśli chodzi o jednostki clock(), to (korzystając z mojej tabelki - http://gynvael.coldwind.pl/n/time_functions):
Pod Windowsem clock() zwraca faktycznie czas w milisekundach.
Pod GNU/Linux clock() zwraca czas w 1/1000000 sec - czyli w mikrosekundach.

Więc jeśli jesteś pod Windowsem, to po prostu usuń /CLOCKS_PER_SEC i tyle - dostajesz czas w milisekundach :)
Jeśli jesteś pod GNU/Linux, to podziel przez 1000 (zamiast CLOCKS_PER_SEC).
A jeśli jesteś na innej platformie, to sprawdź jaka dla niej jest wartość CLOCKS_PER_SEC (po prostu wypisze jakimś cout - to jest normalna liczba), i wylicz przez ile musisz podzielić (albo pomnożyć ;>).
(btw, to jest miejsce w którym bardzo łatwo zrobić błąd przenosząc kod między platformami - jeśli nie zmienisz tej stałej, to pojawia się bug w kodzie; ale to temat na osobny topic ;>)

Hmmm, czy odpowiedziałem na wszystkie Twoje wątpliwości?

0

Tak. Dzięki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1