La proprietà MIN_SAFE_INTEGER di Javascript

La proprietà MIN_SAFE_INTEGER è una costante dell'oggetto Number che rappresenta il minimo intero che posso rappresentare in Javascript senza perdita di precisione.

Number.MIN_SAFE_INTEGER

E' un valore pari a -9.007.199.254.740.991 ossia -253 + 1.

Al di sotto di questo valore, il calcolo diventa inaccurato e qualsiasi operazione matematica perde di precisione nei bit meno significativi.

Perché accade? Il linguaggio Javascript rappresenta i numeri in formato binario e si basa sullo standard IEEE 754 per l'aritmetica in virgola mobile. Questo formato utilizza 64 bit per rappresentare un numero, con 1 bit utilizzato per il segno, 11 bit utilizzati per l'esponente e 52 bit utilizzati per la mantissa. Questo implica che il massimo intero sicuro è 253 - 1, mentre il minimo intero sicuro è -253 + 1. Pertanto, è necessario evitare calcoli al di fuori di questo range.

    Un esempio pratico

    Questo script dimostra l'esistenza di un calcolo erroneo da parte di Javascript.

    <script>
    let x = Number.MIN_SAFE_INTEGER
    document.write(x);
    let y = x*10;
    document.write(y);
    </script>

    Lo script assegna il valore della costante MIN_SAFE_INTEGER e lo stampa.

    -9007199254740991

    Poi moltiplica per 10 il valore contenuto nella variabile x e assegna il risultato alla variabile y. Infine, lo stampa.

    -90071992547409900

    Il risultato è errato perché il prodotto per 10 dovrebbe essere -90071992547409910 mentre Javascript restituisce -90071992547409900 con dieci unità in più.

    Questo calcolo inaccurato è dovuto al fatto che l'operazione si è svolta con valori interi al di fuori del range di sicurezza dello standard IEEE 754 .

     


     

    Segnalami un errore, un refuso o un suggerimento per migliorare gli appunti

    FacebookTwitterLinkedinLinkedin
    knowledge base

    Javascript Number

    Le proprietà

    I metodi