1.11 Lezione 11 - follen99/ArchitetturaDeiCalcolatori GitHub Wiki

Divisione con Shift a destra

I compilatori tendono ad utilizzare delle operazioni più semplici che permettono di ottenere lo stesso risultato di operazioni più complesse.

Se ad esempio un numero da moltiplicare o dividere è una potenza di 2, i compilatori tenderanno semrpe ad usare degli shift (tanti shift per quanto è la potenza di 2).

Questa tecnica funziona bene solo con i numeri unsigned, proprio perchè per i numeri con segno negativi, facendo uno shift verso destra, abbiamo un arrotondamento verso meno infinito, mentre dovrebbe essere verso lo zero. Bisogna quindi stare attenti con questa tecnica.

Associativity - Importante

Per i numeri interi vale sicuramente la proprietà associativa; posso quindi sommarli nell'ordine che preferisco.

Per i numeri rappresentati in virgola mobile, visto che a differenza degli interi sono affetti da un errore di rappresentazione, abbiamo un problema.

Il problema si pone nel fatto che quando sommiamo due numeri enormi (che hanno quindi un errore significativo), ad un numero abbastanza piccolo, il risultato non rispecchia la realtà:

Primo caso: (x + y) + z

Quando sommiamo i tre operandi in questo modo, non abbiamo problemi; questo perchè se sommiamo il Most Neg al Most Positive, otteniamo zero. Quando sommiamo 0 + 1, otteniamo 1;

Quindi nessun problema.

Secondo caso: x + (y + z)

In questo caso abbiamo un errore:

Se sommiamo il Most neg ad 1, otteniamo un valore errato, proprio per colpa dell'errore contenuto nella rappresentazione. Quando andiamo a sommare il Most Pos al risultato precedente, otteniamo 0, e non 1.

Morale della favola

La proprietà associativa non vale per le rappresentazioni in virgola mobile.

A chi interessa la precisione delle rappresentazioni?

Gli errori di rappresentazioni su numeri enormi sono davvero esigue, ma in alcuni casi questi valori sono fondamentali.

Ad esempio, in un calcolo scientifico ogni digit vale, proprio perchè arrotondando diverse volte, alla fine dei calcoli otterremo un risultato errato.

Nei calcoli di tuti i giorni l'errore del FP è trascurabile; ad ogni modo, però, per le operazioni bancarie (ad esempio), la rappresentazioni FP non va bene.

Fine lezione 3


Esercitazione Assembly

📅 nella lezione del 03-31 al minuto 00:28 abbiamo un'esercitazione di assembly con spiegazione di [RARS](GitHub - TheThirdOne/rars: RARS -- RISC-V Assembler and Runtime Simulator).


Fine lezione 11

⚠️ **GitHub.com Fallback** ⚠️