Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

Καλησπέρα σας παραθέτω το κώδικα μου:

#include <time.h> 
#include <stdio.h> 
int main() 
{ 
clock_t t0 = clock(); 
//Χρονοβόρα εργασία 
clock_t t1 = clock(); 
printf("%f", (double)(t1 - t0)); 
} 

Μου βγάζει συνεχώς, ότι ενναλακτική και να έχω κάνει, 0.000000  :mad:
Τι κάνω λάθος;

Επεξ/σία από 8anos8888
Δημοσ.

Καλησπέρα σας παραθέτω το κώδικα μου:

#include <time.h> 
#include <stdio.h> 
int main() 
{ 
clock_t t0 = clock(); 
//Χρονοβόρα εργασία 
clock_t t1 = clock(); 
printf("%f", (long double)(t1 - t0)); 
} 

Μου βγάζει συνεχώς, ότι ενναλακτική και να έχω κάνει, 0.000000  :mad:

Τι κάνω λάθος;

 

Έλα σοβαρά τώρα; 

 

Έχεις t0 και t1 σε απόσταση 1 γραμμής. Χωρίς να υπάρχει κάποιος φόρτος στο πρόγραμμα πριν το t1 και απορείς γιατί δίνει 0;

 

βάλε να κάνει κάτι στη μέση... ένα απλό λοπακι με cout

PS: Αν είναι σωστό το casting...

Δημοσ.

Έλα σοβαρά τώρα; 

 

Έχεις t0 και t1 σε απόσταση 1 γραμμής. Χωρίς να υπάρχει κάποιος φόρτος στο πρόγραμμα πριν το t1 και απορείς γιατί δίνει 0;

 

βάλε να κάνει κάτι στη μέση... ένα απλό λοπακι με cout

Προφανώς και έβαλα κάτι πιο πρίν, απλά τώρα το έγραψα έτσι για παράδειγμα...

  • Like 1
Δημοσ.

Αν εχεις linux απλα μπορεις να χρησιμοποιήσεις τα libraries του linux ενα παραδειγμα:

#include <sys/time.h>
#include <stdio.h>

int main(){
        struct timeval start,end;
        gettimeofday(&start,NULL);
        for(int i = 0; i<1000000000; i++){}
        gettimeofday(&end,NULL);
        printf("%li\n",(end.tv_sec - start.tv_sec));
        return 0;
}

Η πολυ απλα κανεις time your_program πανω στο terminal σου.

 

Για περισσοτερες πληροφοριες για την sys/time.h Εδω:

http://pubs.opengroup.org/onlinepubs/007908775/xsh/systime.h.html

Δημοσ.

δοκίμασε με αυτό printf("\nTime elapsed: %.2f\n",1.0*(end-start)/CLOCKS_PER_SEC);

Δεν μου δούλεψε

 

Αν εχεις linux απλα μπορεις να χρησιμοποιήσεις τα libraries του linux ενα παραδειγμα:

#include <sys/time.h>
#include <stdio.h>

int main(){
struct timeval start,end;
gettimeofday(&start,NULL);
for(int i = 0; i<1000000000; i++){}
gettimeofday(&end,NULL);
printf("%li\n",(end.tv_sec - start.tv_sec));
return 0;
}

Η πολυ απλα κανεις time your_program πανω στο terminal σου.

 

Για περισσοτερες πληροφοριες για την sys/time.h Εδω:

http://pubs.opengroup.org/onlinepubs/007908775/xsh/systime.h.html

 

Μπορώ να μπώ linux, αλλά το θέμα είναι να είναι μέσα στο κώδικα η χρονομέτρηση και να τη κάνει print αυτόματα.

Δημοσ.

Δεν μου δούλεψε

 

 

Μπορώ να μπώ linux, αλλά το θέμα είναι να είναι μέσα στο κώδικα η χρονομέτρηση και να τη κάνει print αυτόματα.

Τοτε υπαρχει και η εναλλακτικη λυση:

#include <stdio.h>
#include <time.h>

int main(){
        time_t start,end;
        double diff;
        time(&start);
        for(int i = 0; i<2000000000; i++){}
        time(&end);
        diff=difftime(end,start);
        printf("%f seconds\n",diff);
        return 0;
}

Αλλα δεν ειναι ακριβως μπορει να ξεφευγουν καποια milliseconds.

Δημοσ.

 

 

Τοτε υπαρχει και η εναλλακτικη λυση:

#include <stdio.h>
#include <time.h>

int main(){
        time_t start,end;
        double diff;
        time(&start);
        for(int i = 0; i<2000000000; i++){}
        time(&end);
        diff=difftime(end,start);
        printf("%f seconds\n",diff);
        return 0;
}

Αλλα δεν ειναι ακριβως μπορει να ξεφευγουν καποια milliseconds.

 

 

 

Στα windows θέλω να το τρέξω, χωρίς τα libraries από linux... Συγκεκριμένα είμαι στο Codeblocks σε windows7,64bit.

 

 

Για long double πρέπει να χρησιμοποιήσεις

printf("%Lf", (long double)(t1 - t0));

και όχι 

"%f"

Δεν είναι αυτό το πρόβλημα, απλά το έγραψα εδώ λάθος.

Δημοσ.

Προφανώς και έβαλα κάτι πιο πρίν, απλά τώρα το έγραψα έτσι για παράδειγμα...

omg. δεν είδα το σχόλιο στον κώδικα....

 

Μια συμβουλή. μην έχεις απλά ένα for( ; ; ) που δεν κάνει τίποτα γιατί ο compiler θα το καταλάβει και θα το προσπεράσει. είναι αρκετά έξυπνοι οι compilers. ακόμα και ένα counter++; να κάνεις, θα βρει τρόπο να μην τρέξει το λοοπ και να σου δώσει το αποτέλεσμα.

 

Οπότε, κάνε μια πράξη με random number ή πολύ απλά cout (γενικά οι έξοδοι στην κονσόλα καθυστερούν την εκτέλεση)

  • Like 1
Δημοσ.

Στα windows θέλω να το τρέξω, χωρίς τα libraries από linux... Συγκεκριμένα είμαι στο Codeblocks σε windows7,64bit.

 

Δεν είναι αυτό το πρόβλημα, απλά το έγραψα εδώ λάθος.

Δηλαδή τι libraries από το linux χρησιμοποιώ στο δεύτερο πρόγραμμα? νομίζω ότι το time.h υποστηρίζετε και στα windows.

Επίσης εγώ που το τρέχω έτσι ας πούμε δουλεύει:

....
main...
	clock_t start,end;
	start = clock();
	for(int i = 0; i<2000000000; i++){}
	end = clock();
	printf("%Lf\n",(long double)(end - start)/CLOCKS_PER_SEC);
....
....
Δημοσ.

Καλησπέρα σας παραθέτω το κώδικα μου:

#include <time.h> 
#include <stdio.h> 
int main() 
{ 
clock_t t0 = clock(); 
//Χρονοβόρα εργασία 
clock_t t1 = clock(); 
printf("%f", (double)(t1 - t0)); 
} 

Μου βγάζει συνεχώς, ότι ενναλακτική και να έχω κάνει, 0.000000  :mad:

Τι κάνω λάθος;

 

Works for me όπου "χρονοβόρα διαδικασία" = _getch();

 

Δεν κάνεις κάτι λάθος εκτός ίσως από το ότι η χρονοβόρα διαδικασία δεν είναι χρονοβόρα.

  • Like 1
Δημοσ.

Works for me όπου "χρονοβόρα διαδικασία" = _getch();

 

Δεν κάνεις κάτι λάθος εκτός ίσως από το ότι η χρονοβόρα διαδικασία δεν είναι χρονοβόρα.

Αυτό ήταν, και από πάνω έχει δίκιο ο GiwrgosPapaas χρησιμοποιούσα for() με 1 εκατομμύριο επαναλήψεις , όπου ήταν πολύ μικρός ο χρόνος και δεν έχει τέτοια ακρίβεια. Ψιλοάχρηστο... αλλά αν θέλεις να μετρήσεις και τη απειροελάχιστη ακρίβεια πώς το κάνεις γιατί σε 0.001 δεύτερα μπορεί να κάνει πολλά ο υπολογιστής

 

δοκίμασε με αυτό printf("\nTime elapsed: %.2f\n",1.0*(end-start)/CLOCKS_PER_SEC);

Επίσης αυτό το 1.0 σε τι εξυπηρετεί, γιατί χωρίς αυτό για κάποιο λόγο δεν λειτουργεί...

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...