I principi dell’aritmetica FIXED-POINT su Arm

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:

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).

Tabella 1

Tabella 1: fixed-point

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:

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

 

 

 

Scarica subito una copia gratis

Una risposta

  1. Maurizio Di Paolo Emilio 25 Dicembre 2016

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend