Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Zeitberechnung


Erni35 - Mo 04.04.05 14:01
Titel: Zeitberechnung
Hallo Leute,

ich habe ein kleines großes Problem mit Delphi.
Ich will die Differenz zwischen zwei Zeitpunkten berechnen mit Millisekunden-Genauigkeit. Leider funktioniert dies nicht mit den Delphi-Bordmitteln. Die Rundungsfehler beiTDatetime sind so groß, dass die Sekunden zwar noch stimmen, aber die Millisekunden fast Zufallszahlen sind. Wie kann ich den Abstand zwischen den beiden Zeitpunkten berechnen, unter Beibehaltung der Genauigkeit auch im Millisekundenbereich?

Selbst ein händisches Ausrechnen des Bruchteils des Tages funktioniert mit extended-Variablen nicht genau genug, hier stören auch die Rundungsfehler.

Danke,
Dietmar.


AXMD - Mo 04.04.05 14:19
Titel: Re: Zeitberechnung
user profile iconErni35 hat folgendes geschrieben:
Hallo Leute,

ich habe ein kleines großes Problem mit Delphi.
Ich will die Differenz zwischen zwei Zeitpunkten berechnen mit Millisekunden-Genauigkeit. Leider funktioniert dies nicht mit den Delphi-Bordmitteln. Die Rundungsfehler beiTDatetime sind so groß, dass die Sekunden zwar noch stimmen, aber die Millisekunden fast Zufallszahlen sind. Wie kann ich den Abstand zwischen den beiden Zeitpunkten berechnen, unter Beibehaltung der Genauigkeit auch im Millisekundenbereich?

Selbst ein händisches Ausrechnen des Bruchteils des Tages funktioniert mit extended-Variablen nicht genau genug, hier stören auch die Rundungsfehler.

Danke,
Dietmar.


Das liegt nicht an TDateTime, sondern an GetTickCount. Nimm Suche in: Delphi-Forum, Delphi-Library QUERYPERFORMANCECOUNTER

AXMD


Erni35 - Mo 04.04.05 14:37

Ich will nicht zwei Ereignisse messen, sondern die Differenz zwischen zwei vorliegenden Zeiten ermitteln. Ich habe zwei Variablen aus einer Textdatei eingelesen und muss die Differenz der Zeiten ermitteln.

Danke.


Golden-Melody - So 10.04.05 02:51

user profile iconErni35 hat folgendes geschrieben:

Selbst ein händisches Ausrechnen des Bruchteils des Tages funktioniert mit extended-Variablen nicht genau genug, hier stören auch die Rundungsfehler.


Meine Empfehlung wäre statt der extended Variablen den Datentyp int64 zuverwenden.
Also erst die vorliegenden Zeitdaten in Millisekunden umrechnen und dann subtrahieren.

Zur Erinnerung:
1 h = 3.600.000 ms
1 t = 86.400.000 ms

soweit reicht sogar noch 32 Bit Integer.

Sollten die zu verarbeitenden Daten über einen Jahreswechsel gehen, müssen die Zeitanpassungen der zuständigen Einrichtungen berücksichtigt werden.


Schorschi-1 - Mi 13.04.05 21:25

Ich denke es geht doch mit Delpi-Bordmitteln....

kennst du schon diese funktion????


Delphi-Quelltext
1:
function MilliSecondsBetween(const ANow, AThen: TDateTime): Int64;