-         

Ergebnis 1 bis 6 von 6

Thema: Loop- / SchlaufenZeit messen und ausgeben

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    11.06.2005
    Ort
    Stans
    Alter
    35
    Beiträge
    47

    Loop- / SchlaufenZeit messen und ausgeben

    Anzeige

    Hallo Leutz!

    Ich habe (als Hausaufgabe von der lieben Schule) ein kleines Programm geschrieben. Diese berechnet die Zahl Pii. Am Anfang muss man die Auflösungsmatrix eingeben. Je grösser diese Matrix ist, desto genauer wird Pi. Aber natürlich geht es auch viel länger.

    Macht aber nix, ist sogar gut so. Es eignet sich bestens für den hmm Sch.... Schnelligkeitsvergleich von des Kollegen Rechners (Mein altes Notebook braucht bei einer Auflösung von 200000*200000 Punkten glatte 14minuten).

    Nun das Problem. Ich habe das Programm so umgeschrieben, dass man immer wieder von Neuem einen Wert eingeben kann. Dies hat aber leider zur Folge, dass die Ablaufzeit des Programms nicht mehr angezeigt wird.

    Kann ich irgendwie die Zeit einer While-schlaufe messen und per "printf" ausgeben. Natürlich möchte ich meinen Code nicht grundelegend abändern

    Hier mein Code:

    /*Programm zur Errechnung von Pi*/


    #include <stdio.h>


    /*Definition der Variablen:

    Aufloesung: Entspricht der Dichtheit der Matrix (Aufloesung)
    Resultat: Das Endergebnis wird darin gespeichert
    Kreistreffer: Aller errechneten Treffer inerhalb des Kreises
    Quadrattreffer:Alle Treffer ausserhalb des Kreises
    y: Wert für die y- Koordinate
    x: Wert für die x- Koordinate*/
    int main(void)
    {

    double aufloesung;

    double Resultat;

    double Kreistreffer;

    double Quadrattreffer;

    double y;

    double x;

    printf("Programm zur Errechnung von Pi\n");
    printf("------------------------------\n\n");
    printf("Aufloesung fuer Berechnungsmatrix eingeben (je groesser desto genauer und <10=Ende):\n");
    scanf("%lf",&aufloesung);
    while (aufloesung>=10)
    {
    x=aufloesung;
    y=aufloesung;
    Kreistreffer=0;

    while (y>=(-aufloesung)) /*Herunterzählen von der y-Koordinate*/
    {
    printf("Zwischenresultat y:%f ",y);
    printf("Zwischenresultat Kreistreffer:%f\n",Kreistreffer);
    x=aufloesung;


    while (x>=(-aufloesung)) /*Herunterzählen von der x-Koordinate*/
    {
    if (((x*x) + (y*y)) <= (aufloesung)*(aufloesung))
    Kreistreffer = Kreistreffer + 1;
    x=x-1;

    }



    y=y-1;




    }
    Quadrattreffer= ((2*aufloesung)+1)*((2*aufloesung)+1);
    Resultat= (4*Kreistreffer)/Quadrattreffer;
    printf("Das Resultat ist:%f\n\n",Resultat);

    printf("Programm zur Errechnung von Pi\n");
    printf("------------------------------\n\n");
    printf("Aufloesung fuer Berechnungsmatrix eingeben (je groesser desto genauer und <10=Ende):\n");
    scanf("%lf",&aufloesung);
    }
    return 0;
    }




    Für die Antworten danke ich im Voraus.

    greets Scriptkiddy
    [-o< [-o< [-o< [-o< [-o< [-o< [-o< [-o< [-o< [-o<
    Bit unser,
    das du bist im Mikroprozessor,
    geheiligt werde dein Zustand
    dein Input komme,
    dein Output geschehe,
    wie als 1,
    so auch als 0.

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Ich nehme mal an, dabei handelt es sich um Standard-C. C hat leider keine Vorstellung von Zeit. Je nach dem, unter welchem Betriebssystem du proggst und welchen C-Compiler du nimmst kommt man anders an die Zeit -- möglicherweise auch garnicht.

    Zeitnahmen sind eben sehr maschinenabhängig, während C maschinenunabhängig ist (oder es zu sein versucht, zumindest war es in den Anfängen so konzipiert, gilt heute bei weitem nicht mehr)
    Disclaimer: none. Sue me.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    11.06.2005
    Ort
    Stans
    Alter
    35
    Beiträge
    47
    Ja es handelt sich um standart C

    Kann man das Progie irgendwie an die Systemzeit anknüpfen? Mir wäre es ja eigentlich egal wenn es "nur" auf XP laufen würde. Ich kann mir schlecht vorstellen, dass es für so ein "grundlagen"-Problem nicht irgend eine Lösung gibt.

    Greets Scriptkiddy
    [-o< [-o< [-o< [-o< [-o< [-o< [-o< [-o< [-o< [-o<
    Bit unser,
    das du bist im Mikroprozessor,
    geheiligt werde dein Zustand
    dein Input komme,
    dein Output geschehe,
    wie als 1,
    so auch als 0.

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Da musst du eben in der Dokumentation zu deinem Compiler wühlen, da ist die API von Compiler zu Compiler verschieden -- eben weil sowas nicht zum Standard gehört. Evtl geht sowas wie date, gettimeofday, time, gmtime, localtime, difftime, etc.
    Disclaimer: none. Sue me.

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    05.11.2004
    Alter
    34
    Beiträge
    35
    Vielleicht kann dir das weiterhelfen.
    http://osg.informatik.tu-chemnitz.de...nterlagen2.pdf
    Kapitel 1.2
    Ich hab es aber selbst nicht versucht, also keine Garantie

  6. #6
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    47
    Beiträge
    497
    Code:
    	LONGLONG l1=0;
    	PLONGLONG pl1=&l1;
    
    __asm {
    			push eax      ; Save registers we will overwrite (eax, ebx, edx).
    			push ebx
    			push edx
    			_emit 0x0F    ; The RDTSC instruction consists of these two bytes.
    			_emit 0x31
    			mov ebx, pl1 ; Put the address where the timestamp goes in ebx.
    			mov [ebx],eax   ; Save low 4 bytes of timestamp there.
    			mov [ebx+4],edx ; Save high 4 bytes of timestamp next.
    			pop edx         ; Restore overwritten registers.
    			pop ebx
    			pop eax
    }
    so hab ichs mal gemacht

    EDIT: Wenn du das einmal am Anfang und einmal am Ende machst hast du deine Zeitdiff.

    sast

    雅思特史特芬
    开发及研究

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •