Ich weiß, ich sehe evtl. vor lauter Bäume nur den Wald nicht mehr, aber ich sehe den Fehler nicht.
Das ist ein Auszug aus einer Routine, auf das Nötigste gekürzt. j ist Null, c wird aus x + j berechnet, a nur aus x. Da j Null ist, sollten die Werte gleich sein.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
x = 6000000;
var
a, b, c, j: Extended;
begin
j := 0;
ShowMessage('x hat den Wert = ' + FloatToStr(x));
ShowMessage('j hat den Wert = ' + FloatToStr(j));
c := Sqr(x + j);
ShowMessage('Quadrat c hat den Wert = ' + FloatToStr(c));
a := Sqr(x);
ShowMessage('Quadrat a hat den Wert = ' + FloatToStr(a));
b := c - a;
ShowMessage('c - a hat den Wert = ' + FloatToStrF(b, ffNumber, 15, 2));
end;
Also ich weiß nicht ob auf anderen Rechner das auch vorkommt, aber c und a sind bei mit unterschiedlich.
//Edit:
Ok, gelegentlich muss man einen Beitrag schreiben, damit der Groschen fällt. Delphi nimmt für die Konstanten immer die kleinste nötige Variable, so dass es x evtl. als Integer betrachtet.
Delphi-Quellcode:
const
x: Extended = 6000000;
Damit wird die Berechnung korrekt ausgeführt.
Trotzdem, der Unterschied ist gewaltig. Ob ich ein Integer potenziere oder Real, das Ergebnis sollte ja gleich sein, wenn der Empfänger Real ist.