mschnell hat geschrieben:AFAIK:
Operationen werden mit einem Typ durchgeführt, der mindestens so groß ist wie der größere der Operanden. Der Type der Variablen, auf die das Ergebnis zugeordnet wird ist für die Operation egal.
Das ist wohl richtig, allerdings ist es nicht immer ganz einsichtig
was, wann, wo gemacht wird. ZB wird
'richtig' berechnet, obwohl 'eigentlich' 0 rauskommen müßte. Noch schlimmer ist das Durcheinander bei Fließkomma:
Code: Alles auswählen
var
d: double;
n: integer;
begin
n := 3;
d := 1.0/n;
writeln(d:30, n*d - 1.0:30);
end.
Dies ergibt in der 64-Bit-Windowsversion das Ergebnis
3.33333343267441E-001 2.98023223876953E-008, ist also völlig falsch, das gleiche Programm mit 32-Bit-Windowsversion liefert erwartungsgemäß
3.33333333333333E-001 -5.55111512312578E-017. Dummerweise betrachten die FPC-Entwickler dies als Feature und nicht als Bug! (Erklärung: 1.0/n in
single gerechnet!)