Tutorial
Vergleiche von Double- und Integer-Zahlen
Dim As Double d1=1.0, d2=3.0, d=d1/d2, Epsilon=1E-16
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)
Print "Epsilon=" &Epsilon
If Abs(d-d1/d2)<Epsilon Then Print "Die Zahlen k”nnten auch gleich sein.."
Wichtig hierbei ist nur die geeignete Wahl von Epsilon! Ist es zu klein, trifft es möglicherweise niemals zu, ist es zu groß, werden unterschiedliche Zahlen als gleich bewertet
Dim As Double d1=1/7, d2=1/9, d=d1/d2, Epsilon=0.1
Print "d1=" &d1 &!"\nd2=" &d2 &!"\nd1=d2? " &*IIf(d1=d2, @"True", @"False")
Print "|d1-d2|=" &Abs(d1-d2)
Print "Epsilon=" &Epsilon
Print *IIf(Abs(d1-d2)<Epsilon, @"Die Zahlen k”nnten auch gleich sein..", @"Unwahrscheinlich, dass die Zahlen gleich sind")
Hier wäre der Epsilon-Bereich falsch gewählt, da die Zahlen aus völlig verschiedenen Operationen stammen und nicht gleich sein können! Eine genaue Empfehlung für Epsilon kann es also nicht geben, hier muss der Programmierer entscheiden, ob und wieviel Unsicherheit in seinem Programm zugelassen werden soll.
Hier gilt wieder einmal das oberste Programmiergesetz:
Ein Rechner macht nicht das, was der Programmierer denkt,
sondern das, was der Programmierer schreibt..
Fröhliches Vergleichen
Gruß
ytwinky
Gehe zu Seite
1 2 3
Zusätzliche Informationen und Funktionen |
- Das Tutorial wurde am 04.09.2010 von ytwinky angelegt.
- Die aktuellste Version wurde am 06.09.2010 von ytwinky gespeichert.
|
|