Nochmal die doofen Gleitkommazahlen (Sprache C) |
11.11.2015, 10:46 | Auf diesen Beitrag antworten » |
DrInf | Nochmal die doofen Gleitkommazahlen (Sprache C) Meine Frage: Ich hatte hier letztes Mal schon einen Beitrag gepostet zu diesem Thema, nun noch einmal: Etwas besser ist der folgende Ansatz: Hier eine Methode, um zwei Gleitkommazahlen miteinander zu vergleichen: final double EPSILON = ... // z.B. 0.000001 double a = ... double b = ... if (Math.abs( a - b ) < EPSILON) { ... } // almost equal else { ... } // not equal (c) Funktioniert der unter (b) entwickelte Ansatz auch, wenn die Variablen a und b im Verlauf der Rechnung Werte sehr unterschiedlicher Größenordnungen (z.B. zunächst a = b = , später aber a = b = ) annehmen können? Geben Sie ein Verfahren an, dass bei fest gewähltem Epsilon auch für Variablen mit fast gleichen Werten in sehr unterschiedlichen Wertebereichen funktioniert. Benutzen Sie ggf. die Funktionen Math.abs(a) für den Absolutwert der Variable a, Math.max(a,b) für die größere der beidenWerte a und b, und Math.isNaN(a) für den Test auf den Wert NaN: /* returns 1 if two double-precision numbers are almost equal, considering their scale, and 0 otherwise. */ int AlmostEqual( double a, double b ) { ... // your code here } Meine Ideen: Ich hab ehrlich gesagt keinerlei Ansätze. Unsere Tutoren faseln durchgängig etwas von prozentualer Abweichung, ich weiß aber leider nicht, was ich mit der prozentualen Abweichung hier anfangen soll? Hinzukommt, dass mir die Sprache C überhaupt nicht bekannt ist, da ich in Java programmiere. Kann mir hier bitte, bitte irgendjemand weiterhelfen? |
|
|
11.11.2015, 16:45 | Auf diesen Beitrag antworten » |
eulerscheZahl | Wie du mit den unterschiedlichen Wertebereichen umgehen kannst, hatte ich dir schon letztes Mal erklärt (Gleitkommazahlen IEEE754 Problem). C und Java unterscheiden sich da nicht wirklich, da sie beide den IEEE Standard verwenden. |
|
Verwandte Themen
Die Beliebtesten » |
Die Größten » |
Die Neuesten » |
|