Double und Nachkommastellen

19/10/2012 - 08:16 von W. Wolf | Report spam
Hallo NG,

habe eine Frage an die, die sich mit den Internals von VB auskennen.
Wie vermeidet VB Berechnungsfehler die sich aus der Umwandlung von
Dezimal nach Binàr ergeben?
Am Beispiel von JavaScript (angeblich machen auch andere Sprachen
folgenden "Fehler"): Zahlen werden hier als 64Bit Binarys gespeichert
(vermutlich àhnlich wie der VB-Typ Double). Hat zur Folge, dass es bei
der Umwandlung bzw. bei der Berechnung zu kleinen Fehlern kommt, weil
bestimmte Zahlen nicht genau darstellbar sind.
Z.B. ergibt 0.1 + 0.2 = 0.30000000000000004

Angeblich (habe es selbst nicht getestet) soll das auch in .Net passieren:
Dim d1 As Double = 0.1
Dim d2 As Double = 0.2
Console.WriteLine("{0:R} * {1:R} = {2:R}", d1, d2, d1 * d2)

Alle meine Versuche das auch in VB nachzubilden, z.B. mit
Debug.Print CDbl(0.1) * CDbl(0.2)
Debug.Print CDec(0.1) * CDec(0.2) usw.
sind "gescheitert", VB rechnet (scheinbar) immer richtig.

Kann das jemand erklàren oder habt ihr eventuell einen Link zu der
Thematik. Bisschen was steht auf Wikipedia unter
http://de.wikipedia.org/wiki/Gleitkommazahl

Genau genommen bin ich ja nicht unglücklich mit dem was VB macht :-).
Mir geht es mehr um das, was in JavaScript passiert, hoffe aber, dass
ich durch den Vergleich mehr verstehen kann.

Viele Grüße
W. Wolf
 

Lesen sie die antworten

#1 R.Kantas
19/10/2012 - 15:05 | Warnen spam
Es ist wie alles im Leben nur eine Frage der richtigen Rundungen :-)

Ähnliche fragen