Am 01.02.2010 um 20:19 schrieb Andy Fuchs:

> Das ist von Fall zu Fall unterschiedlich. Letztlich kommt's auf die
> benötigte Genauigkeit an.
> 
> Das Problem ist, dass Fliesskommazahlen NIEMALS *genau* sind. Sie enthalten
> immer eine gewisse 'Unschärfe' und zwar spätestens, wenn eine Division
> durchgeführt wird (die ja binär ist und daher mit einer endlichen
> Genauigkeit erfolgt). Daher ist beispielsweise 199.0/100.0 *ungefähr* 19,9.
> Da der Wert (für den Computer) aber binär ausgedrückt wird, ist's halt nicht
> *genau* 19,9. Das läppert sich u.U. im Laufe der Operationen zusammen.
> 
> Solange Du Dich - wie in dem Beispiel - in einem bestimmbaren Wertebereich
> aufhältst, kannst Du die Unschärfen vermeiden, wenn Du den kleinsten
> möglichen Wert als ganzzahliges Minimum annimmst (daraus ergibt sich dann
> automatisch der Multiplikator).
>  Das Ganze ist übrigens ein typisches Problem, wenn Du z.B. Lohnsteuerdaten
> mit unterschiedlichen Programmen berechnest. Da kann's schnell mal
> passieren, dass die Endbeträge um einige Cents auseinanderliegen. Brichst Du
> das Ganze auf Cents runter, vermeidest Du das grundsätzliche Problem, dass
> Deine Zahlen bereits unscharf gespeichert sind und ebenso verarbeitet
> werden. D.h. die Ergebnisse sind deutlich konsistenter... Den
> Fliesskomma-Wert verwendet man dann quasi nur bei der letztlichen Ausgabe
> (z.B. mit format(...)).


Die Problematik von Fließkommazahlen ist mir bekannt, aber es gibt in Rb noch 
einen weiteren Datentyp (den ich bisher aber nicht genutzt habe): Currency. Der 
Name des Datentyps lässt ja darauf schließen, dass er speziell für Geldbeträge 
gedacht ist. Hier, was die LangRef über den Datentyp sagt:

     This is a 64-bit fixed-point number format that holds 15 digits to the 
     left of the decimal point and 4 digits to the right. It is compatible with
     the Currency data type that is offered in some versions of Visual Basic.

Ob vier Nachkommastellen für ein Finanzprogramm ausreichend sind weiß ich 
nicht, ist hier aber auch nicht meine Frage. Verstehe ich es richtig, dass 
dieser Datentyp die "Unschärfe" von Fließkommazahlen (zumindest bis zur vierten 
Stelle hinter dem Komma) vermeidet?

Gruß
Christian

----------------------------------------
Christian Dorn
realbasic {a} online.de

REALbasic 2009r5 Studio

iMac 3.06 GHz Intel Core 2 Duo, 4 GB RAM
PowerMac G5 2x2GHz, 1.5 GB RAM
Mac OS X 10.6.2
----------------------------------------









Antwort per Email an