Nochmal die doofen Gleitkommazahlen (Sprache C)

Neue Frage »

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 = [latex]10^{15}[/latex],
später aber a = b = [latex]10^{-7}[/latex]) 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? unglücklich
 
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.
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »