Subject: Re: trunc / neuste Version fehlerlos?
From: "Dr. Egbert Seibertz" <egbert>
To: Frank Heckenbach <[email-masked]>
Date: Fri, 28 May 2004 05:23:20 +0200

Vielen Dank, Euch beiden, für Eure Hinweise!

> (Ich habe das Programm etwas umgeschrieben und jetzt läuft es:)
> 
> ...
> 
> und so weiter.
Ja, ich hatte auch schon bemerkt, daß dieses Verhalten von der
Stellung in der Rechenvorschrift abhängt ...
> 
Frank:
> 
> Das ursprüngliche Programm sagt auch mit der aktuellen GPC-Version
> 23259.
gut, also update, hoffentlich nicht so stressig wie beim letzten Mal
(zwei Programme ließen sich fehlerfrei übersetzen, machten dann aber
etwas andere Dinge ... was ich peinlicher Weise nicht sofort gemerkt
hatte ...)
> 
> Dies ist aber nicht zwangsläufig ein Fehler. Schließlich rechnest du
> hier mit Fließkomma-Zahlen, die von Natur aus ungenau sind (sofern
> sie nicht eine endliche *Binär*-Bruch-Darstellung haben, was bei
> Hundersteln nicht der Fall ist).
> 
> Der tatsächlich verwendete Wert *muss* also ein bisschen zu groß
> oder zu klein sein. (Je nachdem, was näher ist. "Zufälligerweise"
> ist bei 232.60 bei `Real' offenbar der etwas kleinere Wert näher.
> Bei `ShortReal' und `LongReal' wäre es der größere. Dort geht es
> dann bei anderen Zahlen schief.) Nach der Multiplikation bleibt der
> Wert dann natürlich zu groß/klein, es sei denn, er wird (wiederum
> "zufällig") durch einen Rundungsfehler ausgeglichen.
aha, ich dachte da zuerst an einen binären Überlauf/Unterlauf ...
> 
> Und da `Trunc' knallhart abschneidet (wie es ja sein soll), wird aus
> 23259.999999999999999 eben 23259. Mit `Round' fällt so ein Fehler
> weniger auf, ist aber prinzipiell auch möglich.
... im ursprünglichen Programm wird ein real mit zwei Nachkommastellen
gelesen ... trunc wäre da schon richtig gewesen ...
> 
> Daher die Moral von der Geschichte: Für Geldbeträge immer
> Integer-Typen (in der kleinsten Einheit, hier also Cent) verwenden.
> Unter <http://gnu-pascal.de/contrib/frank/misc/moneyutils.pas> habe
... die schaue ich mir dann mal an ...
> ich übrigens eine kleine Unit zur komfortableren Ein-/Ausgabe
> solcher Typen.
> 
> Frank
> 
nochmals vielen Dank!

Grüße
Egbert