Java doppelte Verlustpräzisionsberechnung

8

Ich habe die folgende Doppelberechnung in Java:

%Vor%

Wenn wir nun die Genauigkeit nicht verlieren, wäre C3 == C1 wahr. Aber da wir die Genauigkeit verlieren, sind C3 und C1 immer noch gleich?

Wenn sie nicht immer gleich wären, wenn ich C1 , C2 , S und C3 hätte, wie könnte ich die rate ändern, um sicherzustellen, dass nach der Berechnung C3 gleich wäre zu C1 ?

Hinweis: Leider ist die Verwendung von BigDecimal keine Option.

    
user1819676 15.04.2016, 06:35
quelle

2 Antworten

3

Im Allgemeinen vergleichen wir zwei Doppelwerte nicht direkt mit == . Stattdessen messen wir den Unterschied zwischen ihnen. z.B. Math.abs(C3 - C1) < 1e-6 .

    
Hongliang 15.04.2016 07:00
quelle
3

Nicht so.

Gleitpunkt ist eine Annäherung. Das nächste Double, Bit 1, das der Mantisse hinzugefügt wird, kann für große Exponenten zwischen diesen beiden Doubles eine ziemlich große Lücke verursachen.

S, das 0 annähert, wird riesige Doppelgänger verursachen, die eine große Lücke zwischen ihnen haben. Das wird nicht mehr korrigierbar sein, sagen wir mit dieser einfachen Rundung. Selbst wenn das kleine S nicht dazu führt, dass die Division den doppelten Bereich mit INFINITY überschreitet.

Man kann leicht von 1000 sein.

    
Joop Eggen 15.04.2016 08:35
quelle

Tags und Links