Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Fehler bei Convertieren von Single nach Double

8 views
Skip to first unread message

tora...@gmail.com

unread,
Jan 26, 2014, 6:21:24 AM1/26/14
to
Hallo,

folgender Fehler bringt mich in echte Schwierigkeiten.
Dim a As Single = 62361.85
Dim b As Double = a
Dim c As Double = 62361.85
Trace.WriteLine(a.ToString)
Trace.WriteLine(b.ToString)
Trace.WriteLine(c.ToString)

bringt als Ergebnis:
62361,85
62361,8515625
62361,85

mit einigen anderen Zahlen funzt das Convertieren von Si nach dbl auch nicht.
Ich bin mir schon bewußt über die internen Eigenschaften beider Typen - doch das ist doch ein 'falscher' Fehler - oder?
In welchen Zahlenbereichen darf man das nicht machen?
Mache ich etwas falsch?

Vielen Dank
Grüße von Torsten

Anton Bayer

unread,
May 28, 2014, 11:10:33 AM5/28/14
to
In diesem Beispiel ist tats�chlich b nicht gleich a, b hat nur den Wert von
a zugewiesen bekommen, ihn aber im Double-Format (8 bytes) gespeichert,
w�hrend a als Single 4 Bytes ben�tigt.

Ich versuch's mal einfach zu machen:

Beide Zahlen werden intern im Bin�rformat und nicht im Dezimalformat
gespeichert, was bedeutet, da� i.d.R. weder die 4-Byte- noch die
8-Byte-Darstellung *exakt* den zugewiesenen Wert repr�sentieren, sondern
eben mit einer winzigen Abweichung davon.

Bei der String-Ausgabe in Basic werden die exakten Zahlenwerte wieder
gerundet, ergeben sich nach hinten raus nur Nullen, dann werden diese
abgeschnitten, weshalb sich bei a wieder der Originalwert ergibt, w�hrend
bei b die Rundung aufgrund der h�heren Genauigkeit (double statt single)
eben nicht mehr zu Nullen f�hrt.

Aufgrund dieser Problematik gibt es auch z.B. bei Summen Abweichungen.
Addiert man a nur gen�gend oft (n mal) zu sich selbst auf, dann wird die
kumulierte Summe dieser Differenz so gro�, da� nicht der n-fache Wert von a
herauskommt, sondern etwas mehr oder weniger.



0 new messages