Double auf kleiner gleich überprüfen

Hallo,

wie kann ich am geschicktesten einen double Wert auf kleiner gleich überprüfen?

Gleichheit geht ja so:
Java:
static final double EPS = 0.1E-8;
if (Math.abs(wert1 - wert2) < EPS)

Wobei EPS die Genauigkeit ist.
Wo ist die Genauigkeit für korrekte Ergebnisse bei der Distanzberechnun anzusetzen?

Wie würde kleiner gleich aussehen?
Den
Java:
if (wert1 <= wert2)
liefert bei mir Müll!


Wie zuverlässig ist Double.compare(wert1, wert2) bzw. benutzt ihr das überhaupt?
Vielen Dank für eure Mühe!
 
Zuletzt bearbeitet:
Hi
Wieso gibt dir
Java:
wert1 <= wert2
Müll?

Das einzige Problem das ich mit obigem zum Teil schon hatte war, dass die Doubles bei einer Ausgabe gleich gross waren intern aber ihrgendwie doch nicht ganz gleich waren. Um das zu umgehen habe ich einfach beide Double auf 2 Nachkommastellen gerundet und dann verglichen. Klappt wunderbar, aber ob es die intelligenteste Lösung ist weiss ich nicht..

Gruss
 
Also ich hab jetzt mit
Java:
Double.compare(wert1, wert2)  < 0
probiert und diese Methode funktioniert - bis jetzt - einwandfrei. Ohne Runden oder Genauigkeitsabschätzungen

Doubles bei einer Ausgabe gleich gross waren intern aber ihrgendwie doch nicht ganz gleich waren.
eben

:)
 
Also ich hab jetzt mit
Java:
Double.compare(wert1, wert2)  < 0
probiert und diese Methode funktioniert - bis jetzt - einwandfrei. Ohne Runden oder Genauigkeitsabschätzungen
Wolltest du nicht auf kleiner gleich testen? Jetzt testest du ja nur auf kleiner als.

Als Test würde ich folgenden Check machen:
Code:
if (Math.abs(wert1, wert2) < EPS) REQUIRE(dein_kleiner_gleich(wert1, wert2) && dein_kleiner_gleich(wert2, wert1));
Gruß
 
Double.compare() sieht nicht so schlecht aus:

double d1 = 0.1d;
double d2 = 0.2d;
double d3 = 0.3d;
double d33 = d1 + d2;

if (Double.compare(d33, d33) == 0 ) {
System.out.println("Equal");
} else {
System.out.println("Not equal");
}
if (d33 == d3){
System.out.println("Equal");
} else {
System.out.println("Not equal");
}
 
Hi.

Bitte verwende die [code=java][/code] Tags für deinen Code. Danke.
Double.compare() sieht nicht so schlecht aus:

Java:
        double d1 = 0.1d;
        double d2 = 0.2d;
        double d3 = 0.3d;
        double d33 = d1 + d2;
        
        if (Double.compare(d33, d33) == 0 ) {
            System.out.println("Equal");
        } else {
            System.out.println("Not equal");
        }
        if (d33 == d3){
            System.out.println("Equal");
        } else {
            System.out.println("Not equal");
        }
Dein Test sagt leider nicht viel aus. Außerdem hast du d33 mit d33 verglichen...

Double.compare arbeitet im Grunde genauso wie die <=, =, > usw. Operatoren der nativen Typen auch. (bis auf die Behandlung von NaN und +0 / -0)

Bsp:
Java:
// Groovy

def d = 3.0
def s = Math.sqrt(d)

print "Ergebnis: " + Double.compare(d, s * s)
Code:
Ergebnis: 1
Daraus folgt:
d ? (?d)²

Deshalb muss man double / Double Werte anders vergleichen.

Gruß
 
Zuletzt bearbeitet:
Zurück