
La funzione uint16() in Scilab
La funzione uint16() di Scilab converte numeri o matrici in numeri interi senza segno a 16 bit.
uint16(x)
Il parametro x può essere un numero o una matrice di numeri.
La funzione converte ogni numero decimale in un numero intero a 16 bit senza segno.
Il nome della funzione è l'abbreviazione di "unsigned integer" a 16 bit. Poiché si tratta di un intero senza segno a 16 bit, questo tipo di dati può rappresentare valori che vanno da 0 a 65.535.
Ecco un esempio pratico.
Assegna alla variabile "num" il valore decimale 12345.6789
num=12345.6789
Poi converti il numero in un intero a 16 bit con la funzione uint16()
uint16(num)
La funzione tronca il numero restituendo solo il valore intero 12345.
ans =
12345
Cosa accase se il numero è più grande di 65.535 o più piccolo di zero?
Se il numero è più grande del valore massimo rappresentabile a 16 bit (65.535), la funzione uint16() continua il computo a partire dal valore minimo (0).
Ad esempio, 65535+1 restituisce 0
uint16(65535+1)
ans =
0
Mentre 65535+2 restituisce 1 e via dicendo.
uint16(65535+2)
ans =
1
Lo stesso accade se il numero è inferiore al valore minimo rappresentabile a 16 bit (ossia zero). In questo caso la funzione continua il computo a ritroso a partire dal valore massimo.
Ad esempio, la conversione di 0-1 ritorna 65535.
uint16(0-1)
ans =
65535
Pertanto, la funzione uint16() non restituisce un errore di overflow, perché si basa sull'aritmetica modulare.
A cosa serve usare gli interi a 16 bit? A differenza dei dati in virgola mobile o di altri tipi di dati più grandi, l'utilizzo di interi a 16 bit riduce significativamente l'uso della memoria, specialmente quando si lavora con grandi set di dati, e rende più veloce il calcolo rispetto agli interi a 32/64 bit e ai numeri in virgola mobile (float).
Tuttavia, ricorda che ogni conversione tramite uint16() implica un troncamento di un numero decimale in un intero e questo comporta una perdita di informazione e di precisione nel calcolo.