Einzelnen Beitrag anzeigen

Benutzerbild von Kraisel
Kraisel

Registriert seit: 19. Mär 2012
Ort: Bochum-Linden
64 Beiträge
 
Delphi 12 Athens
 
#1

Trunc Fehler ???

  Alt 24. Okt 2015, 13:13
Hallo,

Handelt es sich bei Trunc um einen Fehler, oder gibt es eine gute Erklärung:

Delphi-Quellcode:
procedure Test;
var a, b, e1, e2, e3, e4: Double; // mit Single immer OK ???
begin
  a := 0.1;

  b := 1 / a;
  e1 := Trunc (b); // e1 = 10 OK

  e2 := Trunc (1 / a); // e2 = 9 falsch

  e3 := Trunc (RoundTo(1 / a, -14)); // e3 = 10 OK
  e4 := Trunc (RoundTo(1 / a, -15)); // e4 = 9 falsch

  Assert (e1 = 10);
  Assert (e2 = 10); // Abbruch durch Assertion
  Assert (e3 = 10);
  Assert (e4 = 10); // Abbruch durch Assertion
end;
Natürlich ist mir klar, dass es Rundungsfehler gibt und Trunc diese dann ungünstig abschneiden kann. So ist z.B. (5 - 2 x Resolution) ja 4 und nicht 5. In Test erkennt man, dass der Rundungsfehler zwischen der 14 und 15 Stelle hinter dem Komma entsteht. Soweit ja OK.

Aber wieso ist e1 richtig und e2 falsch, da hier doch lediglich eine lokale Kopie eines berechneten Wertes anstatt der berechnete Wert selber genutzt wird? Und warum funktioniert das alles bei Single einwandfrei?

Vielen Dank.
Peter Kaisler
Das einzig Komplizierte ist zu begreifen wie einfach es ist.
  Mit Zitat antworten Zitat