Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: Johnson am 26.04.13 - 10:39:48

Titel: Gleiche Werte, unterschiedliche Ergebnisse im Vergleich
Beitrag von: Johnson am 26.04.13 - 10:39:48
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.
Titel: Re: Gleiche Werte, unterschiedliche Ergebnisse im Vergleich
Beitrag von: Tode 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...
Titel: Re: Gleiche Werte, unterschiedliche Ergebnisse im Vergleich
Beitrag von: klaussal am 26.04.13 - 10:57:23
Mit "Long" funktioniert es.
Titel: Re: Gleiche Werte, unterschiedliche Ergebnisse im Vergleich
Beitrag von: Glombi am 26.04.13 - 11:01:43
siehe dazu auch
http://www-01.ibm.com/support/docview.wss?uid=swg21096503
Titel: Re: Gleiche Werte, unterschiedliche Ergebnisse im Vergleich
Beitrag von: Johnson 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.
Titel: Re: Gleiche Werte, unterschiedliche Ergebnisse im Vergleich
Beitrag von: Werner Götz 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