der 64-Bit Delphi-Compiler hat "praktischerweise" keinen Support für den Extended-Datentyp mehr, es ist aber der einzige Datentyp der Int64 verlustfrei speichern kann, und sehr nützlich um einiges zu berechnen.
Nur rein interessehalber: Warum braucht man dafür einen 10 Byte Datentyp? Ich hatte bisher mit Int64 noch keine Probleme.
Ich verwende auch fast überall Int64. Aber z.B. bei der Berechnung des Fortschritts geht das so nicht. Anstatt langwieriger Erklärungen hier mal Pseudocode (einige Sonderfälle nicht beachtet):
Delphi-Quellcode:
var
MinPos, MaxPos, Range: Int64;
ProgressStep: Extended; // Feld einer Klasse, keine lokale Variable
begin
Range := MaxPos - MinPos; // Repräsentiert z.B. die minimal und maximal mögliche Position innerhalb einer Datei
ProgressStep := Range / ProgressBar.Max;
end;
procedure SetProgressBarPos(Pos: Int64);
begin
ProgressBar.Position := Round(Pos * ProgressStep);
end;
Bei ganzzahligen Operationen kann ProgressStep den Nachkommaanteil nicht speichern und sich dieser Fehler in SetProgressBarPos() stark "summieren".
Warum ich diese Skalierung überhaupt brauche? ProgressBars können höchstens Int32 verarbeiten, aber HxD kann Dateien über 4GiB darstellen. Ähnliches gilt für Scrollbars oder andere Positionsbestimmungen im Code die relativ zu etwas anderem sind.