Ho il seguente doppio calcolo in Java:Java calcolo doppia perdere in precisione
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);
Ora, se non abbiamo perso la precisione, C3 == C1
sarebbe vero. Ma dal momento che perdiamo la precisione, sarà sempre C3
e C1
uguali?
Se non sarebbero sempre uguale, se ho C1
, C2
, S
e C3
, come potrei modificare il rate
per assicurarsi che dopo il calcolo C3
sarebbe pari a C1
?
Nota: sfortunatamente l'utilizzo di BigDecimal non è un'opzione.
se siete interessati a mantenere la precisione poi fare usare un 'BigDecimal'. – SomeJavaGuy
sfortunatamente usare BigDecimal non è un'opzione, dato che la velocità è già stata memorizzata dopo che la precisione è stata persa, e non posso fare nulla al riguardo. – user1819676
@KevinEsche BigDecimal impedisce solo la perdita di precisione se i numeri sono tutti rappresentabili come frazioni decimali finali. Considera il caso di C1 = 1, C2 = 1, S = 0,3 –