Zeit messen -> SystemUnterschiede in der Ausgabe



  • Hallo,
    ich messe meinen code auf diese weise:

    clock_gettime(CLOCK_REALTIME, &tp);
        start = 1e9 * tp.tv_sec + tp.tv_nsec;
    
        //zu messender code
    
        clock_gettime(CLOCK_REALTIME, &tp);
        stop = 1e9 * tp.tv_sec + tp.tv_nsec; 
    
        time = (stop - start) * 1e-9;
    
        std::cout << "\t" << time <<  "\t seconds" << std::endl;
    

    Mein Problem ist, dass ich auf dem einen Linuxsystem eine Ausgabe bekomme die IMMER 5 Nachkommastellen hat und auf dem anderen System immer nur 2.

    Ich benutze denselben compiler (gcc). Nur das eine istein Ubuntu system, das andere ein gentoo system. Ich bezweifle ja dass es am system liegt.

    Allerdings haben jegliche formatierungsfunktionen von std::cout etc. nicht geholfen. Ich will eigentlich folgende Zahlendarstellung erreichen bei der Ausgabe:

    ab.cdefg wobei ab die anzahl sekunden sind und cdefg die Nachkommastellen.
    Über obigen code funktioniert das auch auf dem einen system nur auf dem andere nicht. Woran liegt das und wie kann ich das beheben? Ist das eher ein Systemproblem oder doch die Richung C/C++?



  • gib doch erstmal tv_sec und tv_nsec getrennt aus und schau ob die sich unterscheiden



  • hmm...glaubst Du das ist entscheidend? Ich meine die werden sich immer unterscheiden weil ich ja mit 10^9 multipliziere. Und deswegen bekomme ich ja schlussendlich einen wert größer als den anderen. Und die microsekunden werden sich ja unterscheiden wenn ich mehrere läufe mache. Die bleiben ja nie gleich...

    Oder versteh ich da was falsch?



  • Ich habe dieselbe Frage shconmal in einem anderen Forum gestellt wobei es hier nicht sehr weit gekommen ist aber meine Problematik erkennt:

    https://ssl.secure-hosts.de/www.fun-soft.de/showtopic.php?threadid=19892&PHPSESSID=

    Ich wäre sehr froh wenn mir jemand weiterhelfen könnte....



  • Also wenn ich tv_sec und tv_nsec ausgebe dann sehe ich dass ich bei tv_nsec immer so zahlen habe wie 3900000 - also immer die ersten beiden belegt und der rest auf 0. Könnte das ein grund sein warum die ausgabe nach der dritten kommastelle auf Null gesetzt ist? Auch wenn die ausgabe über

    std::fixed << std::setprecision(5)
    

    setze bleibt die ausgabe nach der zweiten nachkommastelle Null also 2.39000 und nicht z.B. 2.39883. Und das IMMER - zwar ändern sich die ersten 3 Zahlen aber ab der dritten nachkommastelle bleibts null. wie kann ich das änern?


Log in to reply