Zeit in Sekunden aber mit Komma



  • Hallo liebe C++ Gemeinde,

    ich versuche vergeblich die Zeit zwischen einem Programmstück zu messen.
    Durch google und Suchfunktion schaffe ich es schon mal die Zeit in gerundeten Sekunden auszugeben, aber ich würde es gerne genauer und in schöner Ausgabe haben. Also z.B sowas: 3.4415 sec

    Mit meinem folgenden Versuch schaffe ich aber nur in der ersten augabezeil eine ganze zahl auszugeben und in der folgenden komischerweise immer eine andere Anzahl microsekunden. Die ändert sich irgendwie ständig.

    Könnte mir jemand helfen? Danke

    timeval start, end;
      	gettimeofday(&start, 0);
    
    	gettimeofday(&end, 0);
       	std::cout << "Time in sec: " << end.tv_sec - start.tv_sec << std::endl;
      	std::cout << "Time in microsec:  "  << end.tv_usec - start.tv_usec << std::endl;
    


  • Also, wenn ich diese Seite richtig verstehe geben nicht beide die gleiche Zeit aus sonder der mikrosekundenwert ist der rest. Jedenfalls kann man das glauben wenn man sich das Beispiel anschaut.

    Und wenn ichs falsch verstehe dann gilt immer noch:

    struct timeval {
        unsigned long  tv_sec;   /* Sekunden seit dem 1.1.1970 */
        long           tv_usec;  /* und Mikrosekunden */
    };
    

    und auch folgendes

    [...]
    Sie liefert in der Struktur timeval auch Mikrosekunden. Wie exakt diese Messung tatsächlich ist, hängt allerdings von der Hardware ab. Die meisten Hardware-Uhrbausteine liefern keine so exakten Werte.
    [...]

    Was das im Bezug auf nur ganze Zahlehn und andere Mikrosekundenwerte heißt sollte eigtl. klar sein.



  • Hmm, ja diese Seite habe ich auch schon gesehen jetzt...

    wie macht Ihr das um dann eine komma-anzeige zu bekommen? evtl. dann über die Tickzählung über clock() ?



  • Ich würde wohl irgendwie eine Funktion benutzen die Millisekunden zurückgibt und durch 1000 teilen. Und natürlich auch einen Variablentyp benutzen der Kommazahlen speichern kann - float, double z.B. .



  • Also das einzige was ich irgendwie hinbekomme ist das folgende:

    clock_t start, end;
    	start = clock();
    
    	end = clock();
    	std::cout << "\t" << static_cast<double> (end - start) / static_cast<double>(CLOCKS_PER_SEC) 
    			<<  "\t[sec]" << std::endl;
    

    Leider ist das nur auf 2 Nachkommastellen genau. Ich bräuchte was genaueres so bis auf 4 stellen. Leider komme ich mit gettimeofday() überhaupt nicht zurecht.

    Wäre nett wenn mir jemand noch weiterhelfen könnte....


Anmelden zum Antworten