Diskuze: premenná clock_t - problém
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Tvůrce

Zobrazeno 15 zpráv z 15.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Sice nevím jak na to, ale můžu se tě zeptat?
Co z toho bude až to bude?
Je to len test trvania behu časti nejakého programu.
Keď je to bez cyklu a spustím test viacej krát, výsledky sú rozdielne.
Ide o to urobiť viac testov v cykle a výsledok spriemerovať.
Slúžiť by to malo k tomu, aby som pri optimalizácii kódu dospel k väčšej
rýchlosti programu.
Zabudol som kliknúť na odpoveď, sorry.
To nevadí. Já si to přečetl
Takže to je třeba pro hru?
Pre akýkoľvek program.
clock() měří procesorový čas využitý procesem, takže jestli tam máš nanosleep() nebo děláš I/O operace, nebude to měřit to, co chceš.
printf("Beh casti programu trval %.3g sekund", (float)(e - s) / CLOCKS_PER_SEC);
Často se (na win) na přesné měření času používá winapi funkce QueryPerformanceCounter() .
(to měla být spíš odpověď na Libor Šimo (libcosenior) )
Napríklad takto:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MNOZSTVO 100000000
#define ROZSAH 100
int main(void)
{
long i;
long *pole_nahodnych_cisiel;
if ((pole_nahodnych_cisiel = (long * ) malloc(MNOZSTVO * sizeof(long))) == NULL) {
printf("Malo pamati!");
return 1;
}
srand(time(0));
clock_t start = clock();
i = 0;
while (i < MNOZSTVO)
pole_nahodnych_cisiel[i++] = rand()%ROZSAH;
clock_t stop = clock();
printf("Trvanie bolo %.3f secund.\n", (float)(stop - start) / CLOCKS_PER_SEC);
free(pole_nahodnych_cisiel);
return 0;
}
Tá funkcia je pre c++ a ja to používam v céčku.
Nakoniec som dospel k záveru, že nie je potrebné opakované meranie, pretože sú tam naozaj len minimálne rozdiely. Ak sa podarí zefektívniť kód, ten rozdiel času je dosť viditeľný.
Týmto:
printf("Beh casti programu trval %.3g sekund", (float)(e - s) / CLOCKS_PER_SEC);
si ma upozornil na čo som pozabudol.
A teda že stačí, aby jedna hodnota výpočtu bola float a výsledok je
float.
Díky.
Ta funkce je pro C i C++.
Tyhle základní funkce jsou v obou jazycích shodné.
A Winapi funkce můžeš volat z (téměř) libovolného jazyka - z C, C++, C#, Javy, Pascalu...
Zobrazeno 15 zpráv z 15.