Ich habe die folgende doppelte Berechnung in Java:Java Doppel verlierende Präzision Berechnung
double C1 = some value; // It's always an integer
double C2 = some value; // It's always integer, and C2 >= C1
double S = some value; // It's always 0 < S <= 1
double carry = some value; // It's always 0 <= carry < 1
double rate = ((C1/C2)/S);
double C3 = Math.floor((rate * S * C2) + carry);
Nun, wenn wir nicht Präzision verlieren würde, würde C3 == C1
wahr sein. Aber da wir Präzision verlieren, werden C3
und C1
noch immer gleich sein?
Wenn sie nicht immer gleich sein würde, wenn ich C1
haben, C2
, S
und C3
, wie konnte ich das rate
ändern nach der Berechnung, um sicherzustellen, C3
würde C1
gleich sein?
Hinweis: Leider ist die Verwendung von BigDecimal keine Option.
, wenn Sie daran interessiert sind, die Präzision zu halten, um eine 'BigDecimal' tun verwenden. – SomeJavaGuy
Leider ist die Verwendung von BigDecimal keine Option, da die Rate bereits gespeichert ist, nachdem die Genauigkeit verloren gegangen ist, und ich kann nichts dagegen tun. – user1819676
@KevinEsche BigDecimal verhindert nur den Verlust der Genauigkeit, wenn die Zahlen alle als abschließende Dezimalbrüche darstellbar sind. Betrachte den Fall von C1 = 1, C2 = 1, S = 0,3 –