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. Avatar photo Maurizio Di Paolo Emilio 25 Dicembre 2016

Scrivi un commento

Send this to a friend