Sebbene i Reali siano noti per la loro imprecisione, sono precisi al 100% anche per i numeri molto grandi, a condizione che non utilizzino la virgola decimale (=integrali).
I numeri fino a 53 bit, o più esattamente [-(2^53)+1, (2^53)-1], cioè un intervallo compreso tra -9.007.199.254.740.992 e 9.007.199.254.740.992, saranno rappresentati esattamente.
Ulteriori informazioni sui Reali
Se si consulta la definizione di virgola mobile binaria a doppia precisione su Wikipedia, si trova quanto segue in merito alla suddivisione e alla precisione delle cifre:
“La precisione del significante di 53 bit fornisce da 15 a 17 cifre decimali significative (2-53 ≈ 1,11 × 10-16). Se una stringa decimale con al massimo 15 cifre significative viene convertita in una rappresentazione in doppia precisione IEEE 754 e poi riconvertita in una stringa decimale con lo stesso numero di cifre, il risultato finale dovrebbe corrispondere alla stringa originale. Se un numero in doppia precisione IEEE 754 viene convertito in una stringa decimale con almeno 17 cifre significative e poi riconvertito in una rappresentazione in doppia precisione, il risultato finale deve corrispondere al numero originale”.
Convertire in stringa
Mentre per molti anni è stato possibile eseguire calcoli su numeri grandi con il tipo Real, la conversione da o verso il testo era limitata all’uso della notazione scientifica a 12 cifre, con conseguente perdita di precisione.
Con 4D v19 R6, abbiamo migliorato la precisione e la conversione di un numero reale (che presenta un numero intero) in un testo.
Il miglioramento della conversione in stringa riguarda il comando String() e i comandi JSON e XML che restituiscono numeri in forma di stringa.
Editor di codice
Ad esempio, è ora possibile digitare nell’editor di codice:
$r:=2147483647000000
e il numero rimarrà così com’è, invece di essere formattato come:
$r:=2.147483647e+15
Buona codifica!