Vergleichen von Fließkommawerten unter Java

Einen Integerwert unter Java zu vergleichen ist trivial. Man nehme zwei Variablen vom Typ Integer und vergleiche sie, unter Zuhilfenahme des entsprechenden Operators, miteinander:

int a = 7;
int b = 7;

boolean equal = a == b;

Am Ende ist der Wert in der Variable equal true, da die Werte in der Variable a und b identisch sind. Nun könnte das Ganze bei Fließkommazahlen ebenso funktionieren:

double a = 7;
double b = 7;

boolean equal = a == b;

Auch in diesem Fall ist das Ergebnis am Ende true. Trotzdem sollten Fließkommazahlen niemals auf diese Weise verglichen werden. Spätestens bei folgendem Beispiel fällt dies auf:

double a = 4.1 + 0.8;
double b = 5.7 - 0.8;

boolean equal = a == b;

Obwohl beide Rechnungen eigentlich 5,9 ergeben sollten, wird in der Variable equal der Wert false enthalten sein. Hintergrund hierfür ist die Speicherung der Fließkommazahlen. Diese ist im Standard IEEE 754 festgelegt. Bei dieser Darstellung besteht die Zahl aus einem Vorzeichen, einem Exponent und einer Mantisse. Bei der Umwandlung der Dezimalzahl in ihre binäre Darstellung und der Verrechnung kann es zu Ungenauigkeiten (z.B. bei der Rundung im Prozessor) kommen. Wenn diese Werte nun binär verglichen werden, sind sie nicht identisch. Statt durch direkten Vergleich, sollte die „Gleichheit“ durch eine Differenzrechnung ermittelt werden:

public static boolean compare(double a, double b) {
    return Math.abs(a - b) < 0.0001; // Diff smaller epsilon?
}

Nachdem die Differenz der beiden Werte gebildet wurde, wird überprüft ob diese kleiner als Epsilon sind. Epsilon stellt den Threshold bzw. eine Schwelle oder Toleranz dar. Solange die Differenz unter diesem Wert liegt, werden beide Werte als identisch angenommen. Natürlich fehlt in dieser Methode noch eine Absicherung gegenüber NaN-Werten.

Statt sich eine solche Methode selber zu schreiben, können Methoden aus bekannten Utility-Bibliotheken wie Guava (DoubleMath.fuzzyCompare) genutzt werden.

Wo repariere ich mein Handy?

Die wenigsten Menschen sind in der Lage einen Akkutausch und andere Reparaturen bei einem iPhone oder ähnlich verschweißten Geräten selbst durchzuführen. In einem solchen Fall kann man sein Gerät zu einem Reparaturdienstleister geben. Hier beginnt dann die Qual der Wahl, denn Anbieter für solche Dienstleistungen gibt es wie Sand am Meer.

Das Vergleichsangebot für einen Akkutausch bei einem iPhone 5

Das Vergleichsangebot für einen Akkutausch bei einem iPhone 5

Hier möchte das Startup kaputt.de Abhilfe schaffen. Dort wählt man das entsprechende Gerät und die benötigte Reparatur und erhält anschließend eine Liste von Angeboten. Hierbei ist auch der Fall bedacht, das man das Gerät selber reparieren möchte, so das man die Preise der Anbieter gegen eine Selbstreparatur vergleichen kann.

Wer streamt es?

Mittlerweile gibt es einige Streamingdienste wie Netflix, Amazon Prime Video und ähnliche. Problematisch ist diese Auswahl immer dann, wenn man die Portale untereinander vergleichen möchte. Bekomme ich Serie X bei Netflix, oder muss ich sie doch eher bei Amazon suchen? Manchmal unterscheiden sich die Dienste auch in der Menge, so werden von einer Serie mal mehr oder weniger Staffeln, je nach Dienst, angeboten.

Wer streamt es?

Wer streamt es?

Mit Hilfe des Dienstes Wer streamt es? ist das ganze nun einfacher geworden. In der Eingabemaske wird die gewünschte Serie, bzw. der gewünschte Film eingegeben und schon erfährt man welcher Dienst wie viele Staffeln anbietet.

QUIX vs. LEGO

Seit einigen Jahren gibt es einen italienischen Hersteller, welcher Steckbausteine kompatibel zum LEGO-System herstellt und anbietet. Diese Bausteine hören dabei auf den Namen QUIX bzw. früher auch KLIX. Bei QUIX gibt es auf den ersten Blick zwei Vorteile. Der erste Vorteil ist, das QUIX knapp ein Drittel günstiger ist als vergleichbare LEGO-Produkte. Der andere Vorteil ist das man QUIX-Steine sortenrein in großen Mengen kaufen kann. Aus dem Grund erwarb ich eine Probepackung der QUIX Steine. Auf den ersten Blick fallen keine größeren Unterschiede auf. Das Material unterscheidet sich nicht, allerdings sind die QUIX-Steine minimal leichter (zirka ein halbes Gramm bei einem 4×2 Block). Die Ecken der Steine sind bei Lego leicht abgerundet, während sie bei den QUIX Steinen relativ scharfkantig sind – was sich negativ auf Handhabung der Steine auswirkt.

Links: QUIX - Rechts: LEGO

Links: QUIX – Rechts: LEGO

Beim Bauen von Modellen werden die Unterschiede zwischen den Steinen noch deutlicher. Während neue Legosteine problemlos aufeinander gesteckt werden können, wird bei den QUIX Steinen teilweise mehr Kraft benötigt, da bestimmte Steine sich nicht einfach aufeinanderstecken lassen. Beim Auseinanderbauen ist dieses Problem auch zu finden. Während bei LEGO Steinen geringe Scherkräfte reichen um z.B. eine Mauer in ihre Einzelteile zu zerlegen, bricht man sich bei den QUIX-Steinen fast die Finger. Zusammenfassend kann man sagen das die QUIX-Steine sehr nah an das Original herankommen (im Gegensatz zu anderen Nachahmerprodukten), aber ihm trotzdem nicht das Wasser reichen können.

Doppelte Fotos unter Mac OS X finden

Bei Fotografieren drückt man meist mehrmals ab wenn ein Motiv geschossen wird. In vielen Fällen führt dies dazu das man mehrere Fotos vom exakt gleichen Motiv hat. Möchte man diese später aussortieren wird dies ohne passende Software mühselig.

Der PhotoSweeper beim Start

Der PhotoSweeper beim Start

Mittels der Mac OS X App PhotoSweeper kann man solche Duplikate finden und entfernen. Die Parameter nach denen die Applikation arbeitet, lassen sich dabei detailliert einstellen. Auch die Ähnlichkeit welche die Bilder erreichen müssen kann über einen Schieberegler eingestellt werden.

‎PhotoSweeper
Preis: 9,99 €

Nach der Analyse der Bilder, werden die vermeintlichen Dubletten angezeigt. Anschließend kann der Nutzer auswählen, welche Fotos gelöscht werden sollen. Die App kann für 8,99 € im Appstore bezogen werden.