8anos8888 Δημοσ. 3 Μαρτίου 2016 Δημοσ. 3 Μαρτίου 2016 (επεξεργασμένο) Καλησπέρα σας παραθέτω το κώδικα μου: #include <time.h> #include <stdio.h> int main() { clock_t t0 = clock(); //Χρονοβόρα εργασία clock_t t1 = clock(); printf("%f", (double)(t1 - t0)); } Μου βγάζει συνεχώς, ότι ενναλακτική και να έχω κάνει, 0.000000 Τι κάνω λάθος; Επεξ/σία 3 Μαρτίου 2016 από 8anos8888
GiwrgosPapaas Δημοσ. 3 Μαρτίου 2016 Δημοσ. 3 Μαρτίου 2016 Καλησπέρα σας παραθέτω το κώδικα μου: #include <time.h> #include <stdio.h> int main() { clock_t t0 = clock(); //Χρονοβόρα εργασία clock_t t1 = clock(); printf("%f", (long double)(t1 - t0)); } Μου βγάζει συνεχώς, ότι ενναλακτική και να έχω κάνει, 0.000000 Τι κάνω λάθος; Έλα σοβαρά τώρα; Έχεις t0 και t1 σε απόσταση 1 γραμμής. Χωρίς να υπάρχει κάποιος φόρτος στο πρόγραμμα πριν το t1 και απορείς γιατί δίνει 0; βάλε να κάνει κάτι στη μέση... ένα απλό λοπακι με cout PS: Αν είναι σωστό το casting...
8anos8888 Δημοσ. 3 Μαρτίου 2016 Μέλος Δημοσ. 3 Μαρτίου 2016 Έλα σοβαρά τώρα; Έχεις t0 και t1 σε απόσταση 1 γραμμής. Χωρίς να υπάρχει κάποιος φόρτος στο πρόγραμμα πριν το t1 και απορείς γιατί δίνει 0; βάλε να κάνει κάτι στη μέση... ένα απλό λοπακι με cout Προφανώς και έβαλα κάτι πιο πρίν, απλά τώρα το έγραψα έτσι για παράδειγμα... 1
M2000 Δημοσ. 3 Μαρτίου 2016 Δημοσ. 3 Μαρτίου 2016 δοκίμασε με αυτό printf("\nTime elapsed: %.2f\n",1.0*(end-start)/CLOCKS_PER_SEC);
Giorgos65ert Δημοσ. 3 Μαρτίου 2016 Δημοσ. 3 Μαρτίου 2016 Αν εχεις 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
8anos8888 Δημοσ. 3 Μαρτίου 2016 Μέλος Δημοσ. 3 Μαρτίου 2016 δοκίμασε με αυτό 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 αυτόματα.
Giorgos65ert Δημοσ. 3 Μαρτίου 2016 Δημοσ. 3 Μαρτίου 2016 Δεν μου δούλεψε Μπορώ να μπώ 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.
ggeo1 Δημοσ. 3 Μαρτίου 2016 Δημοσ. 3 Μαρτίου 2016 Για long double πρέπει να χρησιμοποιήσεις printf("%Lf", (long double)(t1 - t0)); και όχι "%f"
8anos8888 Δημοσ. 3 Μαρτίου 2016 Μέλος Δημοσ. 3 Μαρτίου 2016 Τοτε υπαρχει και η εναλλακτικη λυση: #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" Δεν είναι αυτό το πρόβλημα, απλά το έγραψα εδώ λάθος.
bnvdarklord Δημοσ. 3 Μαρτίου 2016 Δημοσ. 3 Μαρτίου 2016 Είσαι σίγουρος ότι η "χρονοβόρα διαδικασία" είναι χρονοβόρα ; Εμένα δουλεύει ο κώδικας σου.
GiwrgosPapaas Δημοσ. 3 Μαρτίου 2016 Δημοσ. 3 Μαρτίου 2016 Προφανώς και έβαλα κάτι πιο πρίν, απλά τώρα το έγραψα έτσι για παράδειγμα... omg. δεν είδα το σχόλιο στον κώδικα.... Μια συμβουλή. μην έχεις απλά ένα for( ; ; ) που δεν κάνει τίποτα γιατί ο compiler θα το καταλάβει και θα το προσπεράσει. είναι αρκετά έξυπνοι οι compilers. ακόμα και ένα counter++; να κάνεις, θα βρει τρόπο να μην τρέξει το λοοπ και να σου δώσει το αποτέλεσμα. Οπότε, κάνε μια πράξη με random number ή πολύ απλά cout (γενικά οι έξοδοι στην κονσόλα καθυστερούν την εκτέλεση) 1
Giorgos65ert Δημοσ. 3 Μαρτίου 2016 Δημοσ. 3 Μαρτίου 2016 Στα 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); .... ....
defacer Δημοσ. 3 Μαρτίου 2016 Δημοσ. 3 Μαρτίου 2016 Καλησπέρα σας παραθέτω το κώδικα μου: #include <time.h> #include <stdio.h> int main() { clock_t t0 = clock(); //Χρονοβόρα εργασία clock_t t1 = clock(); printf("%f", (double)(t1 - t0)); } Μου βγάζει συνεχώς, ότι ενναλακτική και να έχω κάνει, 0.000000 Τι κάνω λάθος; Works for me όπου "χρονοβόρα διαδικασία" = _getch(); Δεν κάνεις κάτι λάθος εκτός ίσως από το ότι η χρονοβόρα διαδικασία δεν είναι χρονοβόρα. 1
8anos8888 Δημοσ. 3 Μαρτίου 2016 Μέλος Δημοσ. 3 Μαρτίου 2016 Works for me όπου "χρονοβόρα διαδικασία" = _getch(); Δεν κάνεις κάτι λάθος εκτός ίσως από το ότι η χρονοβόρα διαδικασία δεν είναι χρονοβόρα. Αυτό ήταν, και από πάνω έχει δίκιο ο GiwrgosPapaas χρησιμοποιούσα for() με 1 εκατομμύριο επαναλήψεις , όπου ήταν πολύ μικρός ο χρόνος και δεν έχει τέτοια ακρίβεια. Ψιλοάχρηστο... αλλά αν θέλεις να μετρήσεις και τη απειροελάχιστη ακρίβεια πώς το κάνεις γιατί σε 0.001 δεύτερα μπορεί να κάνει πολλά ο υπολογιστής δοκίμασε με αυτό printf("\nTime elapsed: %.2f\n",1.0*(end-start)/CLOCKS_PER_SEC);Επίσης αυτό το 1.0 σε τι εξυπηρετεί, γιατί χωρίς αυτό για κάποιο λόγο δεν λειτουργεί...
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα