-
Funzione calcolo errato
Ciao a tutti, ho questa funzione che fa semplicemente una somma e un prodotto.
Per alcuni valori funziona per altri no, nel senso non ritorna il risultato corretto.
Codice PHP:
function Codia(r,c){ return ((r+c)*(r+c+1)); }
alert(Codia(1908229752,0));
Risultato ottenuto dalla funzione: 3641340788326211000
Risultato calcolato da me: 3641340788326211256
Sapreste dirmi dove sbaglio.
-
In JavaScript tutti i valori numerici vengono trattati come valori in virgola mobile a doppia precisione (IEEE 754 a 64bit), per questa ragione possono avvenire approssimazioni ed altri problemi indesiderati come quello che indichi tu.
Nel tuo caso, il prodotto 3641340788326211256 non è rappresentabile come valore numerico in JavaScript in quanto la sua rappresentazione binaria è di 62 cifre, ma nella codifica usata si possono rappresentare solo 53 cifre binarie, per questo le ultime nove cifre vengono perse.
Per ovviare al problema possono esserci diverse soluzioni, ma per indicare la più adatta alla tua situazione è necessario sapere più dettagli. Per esempio, che numeri tratti? Quanto possono essere grandi al massimo? Sono solamente interi?