
La funzione int16() in Scilab
La funzione int16() in Scilab è utilizzata per convertire numeri o matrici di numeri in una rappresentazione a 16 bit come interi con segno.
int16(x)
Il parametro x può essere un singolo numero decimale o una matrice di numeri.
La funzione produce come output un valore intero a 16 bit se hai fornito un singolo numero, o un insieme di valori interi a 16 bit se hai indicato una matrice.
Cos'è un numero intero a 16 bit? E' un tipo di dato numerico che occupa 16 bit di memoria. Quindi, sapendo che un bit è composto da due cifre 0 e 1, questo tipo di dati può rappresentare 216 = 65536 numeri ossia i numeri compresi tra -32.768 e 32.767.
L'uso di int16() è semplice. Ecco un esempio di base.
Crea una matrice di numeri decimali.
M = [1.2, 2.7; 3.5, 4.9];
Poi converti la matrice tramite la funzione int16()
int16(M)
Il risultato è una matrice con valori interi.
ans =
1 2
3 4
Cosa accade se il numero è maggiore di 32767?
Quando superi il valore massimo rappresentabile a 16 bit, la funzione int16() utilizza l'aritmetica modulare e riparte dal valore minimo ossia -32768
Ad esempio, nella rappresentazione a 16 bit 32767+1 restituisce -32768
int16(32767+1)
ans=
-32768
Mentre 32767+2 restituisce -32767
int16(32767+2)
ans=
-32767
Quando, invece, il valore è inferiore al minimo valore rappresentabile a 16 bit (ossia -32768), Scilab riparte dal valore massimo (32767)
int16(-32768-1)
ans=
32767
Pertanto, in questo tipo di conversioni Scilab non restituisce un errore di overflow perché si basa sull'aritmetica modulare.
Perché usare int16()? Ti permette di usare una minore quantità di memoria se sai già che i tuoi dati numeri sono numeri interi a 16 bit compresi oppure di migrare i dati verso dispositivi che usano dati a 16 bit.
Tuttavia, ricorda che ogni conversione implica un troncamento di un numero decimale in intero, ossia una perdita di precisione nei calcoli.
Quindi usala la funzione int16() con la consapevolezza dei suoi pro e dei suoi contro.