Ist ja interessant! Woher kommt dann aber die 8 für Sizeof(c)?
Delphi-Quellcode:
const
A = 1;
B = 10000;
C = $FFFFFFFF;
D = Integer($FFFFFFFF); // -1
F = 0.5;
G = 1.333333333;
procedure TForm1.FormCreate(Sender: TObject);
begin
ShowMessage(Format('%d %d %d %d %d %d', [SizeOf(A), SizeOf(B), SizeOf(C), SizeOf(D), SizeOf(F), SizeOf(G)]));
// 32 Bit: 1 2 4 4 8 10
// GetTypeName(TypeInfo(F)) oder PTypeInfo(TypeInfo(F)).Name geht nicht
end;
Für untypisierte Konstanten nimmt Delphi meistens erstmal den kleinst möglichen Typen und wenn die spätere Verwendungsstelle keinen anderen Typen vorgibt, dann wird er dort so verwendet.
Bei Floats, wird aber eher oft auf das Größere gegangen, wegen eventueller Rundungsfehler.
Tja, rein theoretisch wäre SizeOf für untypisierte Konstanten nicht verwendbar und teilweise ist sowas auch nicht kompilierbar.
Ich würde eher empfehlen du vergisst Extended.
Single, Double und Currency sind die Typen für gebrochene Zahlen und davon ist Double der Größte. Kommt doch mal irgendwo ein Extended vor, dann ist es zumindestens kein Nachteil.
Offiziell war Extended nie als Speichertyp vorgesehen (nur für die Berechnungen innerhalb der CPU, bzw. für temporäre Variablen/Zwischenergebnisse des Compilers).
Bezütlich 64 Bit-Compilate und der CrossCompiler wurde das in Delphi nun angepasst.
Zitat von
ein x87-Designer und die Intel Corporation:
The temporary real (extended) format was designed not to store data at higher precision as such, but rather primarily to allow for the computation of double results more reliably and accurately by minimising overflow and roundoff-errors in intermediate calculations
Drum ist der Typ in anderen höheren Programmiersprachen nicht verfügbar, bzw. wird selten als Variablentyp benutzt. ("long double" in C/C++)