Forum: Algorithmen, Datenstrukturen und Klassendesign
by himitsu,
26. Feb 2015
Andere brauchen mit ihrem Quarter nur eine viertel Nachkommastelle. :stupid:
Und dann noch bissl zum Rechnen, Positionsweise MwSt. usw.
Knapp 9 Billiarden Euro, auf einen tausenstel Euro genau ... da hätte man ruhig noch für ein/zwei Nachkommastellen mehr Platz gehabt. :stupid:
Forum: Algorithmen, Datenstrukturen und Klassendesign
by himitsu,
26. Feb 2015
Muss?
Currency = 4 Nachkommastellen
Bei Epsilon=0.011 ist 0.01 = 0.02 .
Epsilon muß kleiner als die Hälfte der kleinsten erlaubten Differenz sein, um "sicher" vergleichen zu können.
Wenn A=3, B=4 und Epsilon=>0.5, dann würde 3.5 verglichen mit A und B jeweils "gleich" sein.
Forum: Algorithmen, Datenstrukturen und Klassendesign
by himitsu,
26. Feb 2015
Und wenn man die 0.005 weg lässt, dann wird automatisch ein typspezifischer Wert genommen.
const
FuzzFactor = 1000;
ExtendedResolution = 1E-19 * FuzzFactor;
DoubleResolution = 1E-15 * FuzzFactor;
SingleResolution = 1E-7 * FuzzFactor;
function SameValue(const A, B: Extended; Epsilon: Extended): Boolean;
begin
Forum: Algorithmen, Datenstrukturen und Klassendesign
by himitsu,
25. Feb 2015
Jupp, das kann darf sein, denn genau aus dem Grund gibt es eben das Currency oder die BCD-Typen.
Und aus selbem Grund darf man reelle Typen niemals per Operator (vorallem =) "genau" vergleichen, sondern verwendet z.B. CompareValue, SameValue, IsZero usw.
Auf wieviele Stellen man sich "verlassen" kann, das steht in der Dokumentation, aber danach kann/wird es Abweichungen geben, vorallem...