Buchempfehlung
Windows System Programming
Windows System Programming
Das Kompendium liefert viele interessante Informationen zur Windows-Programmierung auf Englisch. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Tutorial

Vergleiche von Double- und Integer-Zahlen

von RedakteurytwinkySeite 2 von 3

Das wird nicht allein durch das Ergebnis ausgedrückt, sondern vorrangig durch die ausgeführte '/'-Operation. Deren Ergebnis ist -unabhängig von den beteiligten Variablen- immer Externer Link! doppeltgenau!
(Da FreeBASIC intern die IEEE 754-Darstellung benutzt, kann der Abschnitt mit MBF in dreael's Tutorial ruhig übersprungen werden)

Schönschön, was hat das denn nun mit dem Vergleich zu tun? Externer Link! Eine ganze Menge..
Über die interne Darstellung von Zahlen(ob nun doppeltgenau oder ganze Zahl) gibt es im Netz viel zu finden, möglicherweise gibt es ja auch ein Tutorial für FreeBASIC darüber..
Hier begnügen wir uns mit der Feststellung, dass doppeltgenaue Zahlen anders gespeichert werden als ganze Zahlen. Das bedeutet, wenn wir Glück haben, fällt es nicht auf, dass wir Doubles und Integers vergleichen. Möglicherweise fällt es auch deshalb nicht auf, weil das Ergebnis unseren Erwartungen entspricht!
Aber verlassen sollten wir uns darauf nicht..

Halten wir wiederum fest:
Doppeltgenaue Zahlen lassen sich nur mit Glück auf Gleichheit prüfen..
Vergleiche auf '<>', '<' und '>' funktionieren jedoch auch hier!
Kann man denn nicht mit einem Trick dennoch weiterkommen? Nun: that depends..
Es kommt eben darauf an(so die Übersetzung)..
Durch die Externer Link! interne Darstellung kann es vorkommen, dass zwei Zahlen, die gleich sein sollten, folgendermaßen aussehen: d1=4.9999999999999999999 und d2=5.0000000000000000001
Dargestellt werden beide Zahlen als 5, aber die Differenz beider Zahlen ist größer als Null.
Genauer gesagt: der Absolutbetrag der Differenz beider Variablen ist ungleich Null!
Sehen wir uns das im Beispiel an:

Dim As Double d1=1.0, d2=3.0, d=d1/d2
Print "d=" &d
Print "d1=" &d1 &!"\nd2=" &d2 &!"\nd1/d2=d? " &*IIf(d1/d2=d, @"True", @"False")
Print "|d-d1/d2|=" &Abs(d-d1/d2)

Das bedeutet, dass der Unterschied beider Zahlen weit hinter dem Komma beginnt. Alle anderen Stellen sind gleich. Legen wir nun einen Bereich fest(ein sogenannter Epsilon-Bereich), innerhalb dessen Zahlen als gleich angesehen werden sollen, so kommen wir der Sache schon näher:

 

Gehe zu Seite Gehe zu Seite  1  2  3  
Zusätzliche Informationen und Funktionen
  • Das Tutorial wurde am 04.09.2010 von Redakteurytwinky angelegt.
  • Die aktuellste Version wurde am 06.09.2010 von Redakteurytwinky gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen