Naja, man könnte auch Folgendes sagen:
In dem Ausdruck pi * (15.0/360) wird zuerst 15.0 durch 360 dividiert; 15.0 ist, weil für literale Werte der kleinstmögliche Datentyp genommen wird, ein Single, und 15.0/360 ist damit auch ein Single mit dem Wert 4.166666791E-02.
Im Ausdruck pi * 15 /360 wird zuerst pi * 15 berechnet. pi ist ein Extended, das Produkt ist damit auch ein Extended, genauso wie der Quotient. Da alles mit Extended gerechnet wird, können wir uns im Vergleich zum oberen Fall den Ausdruck 15/360 auch als extended ansehen. Dazu kann man (zur Sicherheit) Extended(15)/360 rechnen, und nun erhält man 4.16666666666666666678E-0002.
Ich gebe zu, dass das ganze aber auch recht verwirrend ist, denn wie das folgende kleine Programm zeigt, ist auch der einfache Ausdruck 15/360 schon ein Extended, während 15.0/360 ein Single ist. Man sieht: Wenn man's gut meint, und einen literalen Integer durch Anfügen von ".0" zu einem Float-Typ macht, kann man auch ungenauer werden...
Code: Alles auswählen
program Project1;
uses
Math;
procedure WriteType(ASize: Integer);
begin
Case ASize of
4: WriteLn(' --> Single');
8: WriteLn(' --> Double');
10: WriteLn(' --> Extended');
end;
end;
begin
Write('pi = ' , pi);
WriteType(SizeOf(pi));
Write('15.0/360 = ', 15.0/360);
WriteType(SizeOf(15.0/360));
Write('Extended(15) / 360 = ', Extended(15.0)/360);
WriteType(SizeOf(Extended(15)/360));
Write('15/360 = ', 15/360);
WriteType(SizeOf(15/360));
ReadLn;
end.
Output:
pi = 3.14159265358979323851E+0000 --> Extended
15.0/360 = 4.166666791E-02 --> Single
Extended(15) / 360 = 4.16666666666666666678E-0002 --> Extended
15/360 = 4.16666666666666666678E-0002 --> Extended