Hey,
in wie weit unterscheiden sich die Variablen den dann?
Hi,
ich versuche mich gerade daran ein kleines Programm zu schreiben, mit dem ich testen kann wie lang es z.B. dauert bis 100 zu zählen. Aber irgendwie gelingt mir das nicht. Das eigentliche Ziel ist, später Messungen durchzuführen, deren Zeitinterval möglichst gleich ist. Also z.B. 100 Messungen/s möglichst gleichmäßig auf eine Sekunde verteilt durchzuführen.
Hier mal was ich bis jetzt habe:
Die Ausgabe sieht dann so aus:Code:#include <stdlib.h> #include <stdio.h> #include <time.h> main() { double a,b,c; a = clock(); printf("%d\n",a); printf("%d\n",a); b = clock(); c = b-a; printf("%f - %f = %f\n",b,a,c); return(0); }
Was mich z.B. sehr wundert, ist das wenn ich "a" zweimal ausgebe, der Wert ein anderer ist. Obwohl ich die Variable ja eigentlich garnicht mehr angefasst habe.Code:100 1 0.000000 - 0.000000 = 0.000000
Habt ihr einen Tip für mich?
Danke
Gruß Daniel
Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]
Hey,
in wie weit unterscheiden sich die Variablen den dann?
Schaut ruhig mal auf meiner Homepage vorbei :
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
So wie ich das verstanden habe, sollte clock() ja die aktuelle Zeit zurückgeben. Also sollten sich "a" und "b" ja geringfügig unterscheiden. Die Differenz daraus wäre dann mein Zeitunterschied. Das klappt aber nicht.
Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]
a) So wie ich das verstehe, clockt das Pi recht flott.
b) In welcher Feinheit wird "clock()" gemessen? Hunderstel, tausendstel, millionstel Sekunden??
Wenn ich annehme, dass die clock in tausendstel Sekunden gemessen wird (ein durchaus brauchbarer Wert) kann ich mir vorstellen, dass das Pi sich bei der Aufgabe so langweilt, dass da garnix clockt . . .Code:... main() { ... a = clock(); printf("%d\n",a); printf("%d\n",a); b = clock(); ... }
Ciao sagt der JoeamBerg
Hey,
schau mal vielleicht hilft dir das ja weiter:
http://www.cplusplus.com/reference/ctime/clock/
So wie ich das verstehe gibt Clock nur die Ausführungszeit des Programms aus.
Schaut ruhig mal auf meiner Homepage vorbei :
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
@Kampi: Ja so hab ichs auch verstanden. Sollte aber doch trotzdem funktionieren!?
@Oberallgeier: Habe meinen Code mal etwas geändert:
Die Ausgabe sieht dann so aus:Code:#include <stdlib.h> #include <stdio.h> #include <time.h> main() { int i; double a,b,c; a = clock(); for (i=0;i<5000;i++){ printf("%f\n", a); } b = clock(); c = b-a; printf("%f - %f = %f\n",b,a,c); return(0); }
Sind das dann 380000 Mikrosekunden? Das wären ja 380 Millisekunden bzw. 0,38 Sekunden. Gefühlt könnte das schon hinkommen. Aber die Genauigkeit wäre ja dann "nur" 0,01 Sekunden also hundertstel Sekunden. Das ist mir zu ungenau, besonders wenn man die Leistung des Pi´s bedenkt. Da muss doch noch mehr gehen!?Code:... 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 380000.000000 - 0.000000 = 380000.000000
Danke
Gruß Daniel
- - - Aktualisiert - - -
Ok hab nochmal ein bisschen rumgespielt.
Code:
Die Ausgabe:Code:#include <stdlib.h> #include <stdio.h> #include <time.h> #include <sys/time.h> main() { struct timeval tim; int i; double t1,t2,c; gettimeofday(&tim, NULL); t1=tim.tv_sec+(tim.tv_usec/1000000.0); for (i=0;i<5000;i++){ printf("test\n"); } gettimeofday(&tim,NULL); t2=tim.tv_sec+(tim.tv_usec/1000000.0); c = t2-t1; printf("%.6lf - %.6lf = %.6lf\n",t2,t1,c); return(0); }
Das ist ja schonmal deutlich genauer. 4999 mal "test" zu schreiben, dauert also ca. 0.6 Sekunden. Ich hab den Code jetzt mehrmals ausgeführt. Es gibt eine Abweichung von +-0.1 Sekunden. Liegt das daran, das es nicht Echtzeitmäßig läuft? Oder weil mein Pi auch noch was anderes macht? Prozessorlast ist auf maximal 0.1%.Code:... test test test test test 1358692383.953361 - 1358692383.271900 = 0.681461
Ist eine "genaue" Zeitmessung mit dem Pi also Systembedingt garnicht möglich?
Gruß
Danke Daniel
Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]
Ja, ich vermute mal ohne Echtzeittauglichem Betriebssystem wirst du immer dieses Problem haben, da dein Prozess keine garantierte Zykluszeit bekommt. Ist also nur bedingt für exakte Aufgaben geeignet. Liegt wie gesagt aber nicht am Pi selbst, sondern an der Betriebssystemarchitektur - das Problem hast mit PCs ebenso.
Lesezeichen