Autor Thema: Gleiche Werte, unterschiedliche Ergebnisse im Vergleich  (Gelesen 1896 mal)

Offline Johnson

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Männlich
Hallo allerseits,

wir haben hier ein kleines Zahlenspiel, welches bei gleichen Werten zu unterschiedlichen Ergebnissen führt:

Code
Sub Initialize
	
	Dim i As Double
	Dim x As Double
	Dim y As Double
	
	i = 757.15
	x = 755.00 + 1.08 + 1.07
	y = 755.00 + 1.09 + 1.06
	
	Print "x is equal: " & (i = x)	' returns FALSE
	Print "y is equal: " & (i = y)	' returns TRUE

End Sub

Kann mir jemand dieses "Phänomen" erklären? Ich kann es nicht.
Gruß
Johnson

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Gleiche Werte, unterschiedliche Ergebnisse im Vergleich
« Antwort #1 am: 26.04.13 - 10:51:56 »
Das ist ganz logisch und erklärbar.... Dezimalstellen lassen sich nun mal nicht exakt Binär darstellen, und jeder Computer rechnet Binär.
Damit hat man schon mit einer Dezimalstelle immer einen Rundungsfehler... und mit 2 wird es nur schlimmer...

Dazu gibt es mannigfaltige Artikel im Web etc.
Als Programmierer sollte Dir das "Risiko" aber geläufig sein...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

klaussal

  • Gast
Re: Gleiche Werte, unterschiedliche Ergebnisse im Vergleich
« Antwort #2 am: 26.04.13 - 10:57:23 »
Mit "Long" funktioniert es.

Glombi

  • Gast

Offline Johnson

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Männlich
Re: Gleiche Werte, unterschiedliche Ergebnisse im Vergleich
« Antwort #4 am: 26.04.13 - 11:08:30 »
Zitat
Als Programmierer sollte Dir das "Risiko" aber geläufig sein...
Von C bzw. C++ kannte ich das "Problem" noch. Das hatte ich schon fast geahnt. Konnte es mir in LS nur nicht so recht erklären.

@klauss: Ein Long enthält Ganzzahlen und keine Fließkommazahlen.
Gruß
Johnson

Offline Werner Götz

  • Aktives Mitglied
  • ***
  • Beiträge: 248
  • Geschlecht: Männlich
Re: Gleiche Werte, unterschiedliche Ergebnisse im Vergleich
« Antwort #5 am: 02.05.13 - 11:49:50 »
Hierzu gibt es den Datentyp Currency - den man nicht nur im Zusammenhang mit Währungen einsetzen kann.
Aus der Hilfe: Use the Currency data type for fixed point calculations in which four-decimal-place accuracy is meaningful.
-Werner

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz