Nel calcolo aritmetico, una quantità frazionaria può essere rappresentata con una coppia di valori n ed e detti rispettivamente mantissa ed esponente. Tale coppia esprime un valore mediante la relazione:
n . 2-e
Per le operazioni indicate in questa trattazione verranno considerati due numeri fixed-point a e b espressi rispettivamente come:
a=n . 2-p b=m . 2-q
Il risultato dell’operazione sarà ancora un numero fixed-point c espresso come:
c=k . 2-r
L’esponente e può essere considerato come il numero di cifre in n prima di posizionare il punto decimale (si veda l’esempio della tabella 1).
Se e è una variabile il cui valore non è noto in fase di compilazione si parla di valore floating-point, viceversa se il valore di e è noto già in fase di compilazione si parla di numero fixed-point.
Operazioni base in fixed-point
Cambio di esponente
L’operazione più semplice su un numero fixed-point è il cambio di esponente da p a r in modo da eseguire l’operazione c=a. La nuova mantissa k viene calcolata da n con un numero predefinito di shift a sinistra (di r-p se r>=p) o a destra (di p-r se p>=r).
Addizione e sottrazione
Per effettuare l’operazione di somma c=a+b è necessario prima convertire a e b in modo che abbiano lo stesso esponente r quindi sommare le due mantisse:
n . 2-r+m . 2-r=(n+m) . 2-r
La sottrazione avviene in modo analogo. In assembler/assembly se x e y sono due fixed-point ad esponente q=14 la somma c=x+y può essere eseguita con l’operazione ADD c,x,y. Se invece si intende sommare un fixed-point x ad esponente q=14 con un intero a, l’operazione diviene:
ADD c,x,a,LSL#14.
Moltiplicazione
Il prodotto c=ab può essere calcolato avvalendosi della moltiplicazione intera infatti:
ab=n . 2-p x m . 2-q=(nm) . 2-(p+q)
Dunque la mantissa è il prodotto delle mantisse e l’esponente è la somma degli esponenti. Se il risutato deve avere un esponente prefissato r basterà shiftare la nuova mantissa a destra di (p+q-r) se (p+q)>=r o a sinistra di r-(p+q) se (p+q)<r. In assebler se x e y sono fixed-point con q=14 il prodotto c=xy può essere calcolato con:
MUL c, x, y MOV c, c, ASR#14
Se invece il prodotto è tra x e un intero a l’operazione assembler/assembly si riduce a MUL c, x, a.
Divisione
La divisione c=a/b può essere effettuata avvalendosi di singole divisioni intere secondo la formula: in assembler/assembly per eseguire la divisione c=x/y possono essere utilizzate le seguenti istruzioni:
MOV R0, x, LSL#14 MOV R1, y BL divide MOV c, R0
Radice quadrata
La radice quadrata di un numero fixed-point può essere calcolata come:
In altre parole la radice di un fixed-point può essere calcolata usando l’operazione di radice intera. In assembler/assembly la radice di x il cui risultato viene messo in c viene calcolata come:
MOV R0, c, LSL#14 BL isqr MOV c, R0

I numeri fixed point sono utili per rappresentare i valori frazionari, di solito in base 2 o base 10, utili in tutti quei processori che offrono migliori prestazioni rispetto a FPU (floating).