Czas wykonywania funkcji

Czas wykonywania funkcji
LU
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 6 lat
  • Postów:127
0

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

Kopiuj
czas4=clock();
wybieranie(x,tab_wyb);
czas5=clock();
cout <<"czas "<<czas5-czas4;
 
edytowany 1x, ostatnio: Rev
RE
używając znacznika <code=cpp>kod</code> spowodujesz, że wyświetli się z pokolorowaną składnią
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
0
Kopiuj
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;

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: Rev
LU
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 6 lat
  • Postów:127
0

Chyba coś nie tak

Kopiuj
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

Kopiuj
cout<<czas4; 

powinno wystarczyć. Dobrze rozumuje?

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
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;


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
LU
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 6 lat
  • Postów:127
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:

Kopiuj
 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:

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

a wynik jest taki sam jak przy:

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

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

_13th_Dragon
Zignorowałeś 1000 krotne powtórzenie funkcji: for(int =0;i&lt;1000;++i)
Gynvael Coldwind
  • Rejestracja:ponad 21 lat
  • Ostatnio:12 dni
  • Lokalizacja:Zurich, Switzerland
  • Postów:457
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?


peace,
gynvael.coldwind//vx "Imagination is more important than knowledge..." Albert Einstein
_13th_Dragon
"Więc jeśli jesteś pod Windowsem, to po prostu usuń /CLOCKS_PER_SEC ..." - i módl się aby tego w kolejnej wersji nie zmienili, bądź zostaw ten CLOCKS_PER_SEC jak jest bo to będzie dzielenie przez 1 i kompilator to zoptymalizuje.
Gynvael Coldwind
W sumie racja - można by zostawić time_value/(CLOCKS_PER_SEC/1000). Natomiast TBH wątpię czy MS to zmieni, z kilku powodów: (1) Za bardzo dbają o backward compatibility. (2) To jest compilation-time-constant, więc jeśli by to zmienili, wszystkie binarki przestały by działać (ofc można by zrobić workaroundy jak w przypadku %n i printf, ale to komplikuje sprawę). (3) Taka zmiana w API nie ma w zasadzie sensu (szczególnie, że w WinAPI jest masa lepszych funkcji do pobierania czasu).
LU
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 6 lat
  • Postów:127
0

Tak. Dzięki.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)