Einzelnen Beitrag anzeigen

Popov
(Gast)

n/a Beiträge
 
#1

Die Sache mit der Null

  Alt 27. Apr 2014, 16:18
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.

Geändert von Popov (27. Apr 2014 um 16:22 Uhr)
  Mit Zitat antworten Zitat