Aritmetica floating- point.

Messaggioda Pasquale 90 » 01/04/2021, 17:44

Buonasera,

ho un dubbio sulle operazioni aritmetiche floating pooint, cioè se ho due numeri non so se devo prima normalizzare dopodiché eseguo l'operazione carte e penna ed infine controllo se ci sono le condizione di poter rappresentare il risultato in macchina, oppure, eseguo prima l'operazione carta e penna, dopodiché normalizzo ed infine controllo se ci sono le condizioni di poter rappresentare il risultato in macchina.
In partcolare, sia $F(beta, t, U, O)$ insieme dei numeri macchina, e, $a, b in RR$ con $a=f_1*beta^(e_1) , b=f_2*beta^(e_2)$, $a,b$ non in forma normalizzata.
Voglio fare la somma nel mio calcolatore di $a$ con $b$, procedo nella seguente maniera:


Primo schema:

1) controllo se uno dei due operandi siano rappresentabile in $F$ se no, si ha underflow o overflow a secondo che $e_i le U$ o $e_i ge O,$ dunque, non è possibile eseguire l'operazione.

2) supponendo che sia valida la 1), controllo l'esponenti degli operandi se non sono uguali considero l'esponente più grande tra i due operandi e l'operando con esponente più piccolo lo riscrivo come potenza dell'operando con esponente più grande, dopodiché eseguo l'operazione di somma $c=a+b$ carta e penna, invece se sono uguali, eseguo l'operazione di somma $c=a+b$ carta e penna, poi normalizzo $c$, quindi ottengo $fl(c)$

3) si possono presentare due casi: 3.1) $fl(c)$ rappresentabile in $F$ esattamente, in tal caso avrei finito, oppure 3.2) $fl(c)$ rappresentabile in $F$ ma non esattamente cioè l'esponente $Ulee_c le O$ ma le cifre della mantissa sono maggiore di $t$ in tal caso bisogna procedere con una delle due tecniche: arrotondamento o troncamento.


Secondo schema:

1) verifico se $a,b$ sono in forma normalizzata se no li normalizzo,

2) controllo se $fl(a)$ e $fl(b)$ sono rappresentabile, anche non esattamente, nel calcolatore, se non lo sono non è possibile eseguire l'operazione, se no

3) controllo l'esponenti degli operandi se non sono uguali considero l'esponente più grande tra i due operandi e l'operando con esponente più piccolo lo riscrivo come potenza dell'operando con esponente più grande, dopodiché eseguo l'operazione di somma $c=fl(a)+fl(b)$ carta e penna, invece se sono uguali, eseguo l'operazione di somma $c=fl(a)+fl(b)$ carta e penna

4) normalizzo $c$ ed ottengo $fl(c)$,

5) controllo se $fl(c)$ è rappresentabile, anche non esattamente, nel calcolatore, se lo è, si possono presentare due casi:

$fl(c)$ rappresentabile in $F$ esattamente, in tal caso avrei finito, oppure,
$fl(c)$ rappresentabile in $F$ ma non esattamente cioè l'esponente $Ulee_c le O$ ma le cifre della mantissa sono maggiore di $t$ in tal caso bisogna procedere con una delle due tecniche: arrotondamento o troncamento.

Esempio:

Primo schema
$F(beta=10, t=4, U=-99, O=+99)$

Primo esempio: $a=92.14312*10^(-8), b=7.123*10^(-2)$
Allora $a,b$ sono rappresentabili nel mio calcolatore, quindi posso eseguire l'operazione, dunque,
$-8 < -2$ quindi
$a=0.00009214312*10^(-2)$,
$c=a+b=(0.00009214312+7.123)*10^(-2)=7.12309214312*10^-2$
$fl(c)=0.712309214312*10^(-1)$

$fl(c)$ non è rappresentabile esattamente nel calcolatore, poiché le cifre della mantissa $m$ sono maggiore di $4$, quindi, approssimo $fl(c).$
Risulta con la tecnica del troncamento
$0.712309214312*10^(-1)=0.7123*10^(-1)$,
invece con la tecnica del troncamento
$0.712309214312*10^(-1)=0.7123*10^(-1)$.

Secondo esempio: $c=39.7149*10^(-101), d=-384.1274 *10^(-102).$
Non è possibile eseguire l'operazione in macchina poiché ne c e ne d sono rappresentabili.

Con il secondo schema, sia il primo e il secondo esercizio sono eseguibile nel mio calcolatore.
Quale dei due schemi è corretto?

Scusate se sono stato un pochettino lungo con il messaggio, spero di essere stato chiaro.
Pasquale 90
Average Member
Average Member
 
Messaggio: 339 di 806
Iscritto il: 14/11/2019, 11:24

Re: Aritmetica floating- point.

Messaggioda apatriarca » 16/04/2021, 11:27

Un computer esegue operazioni floating-point solo su valori che sono già nella rappresentazione corretta. La prima operazione è quindi quella di portare i due valori nella corretta rappresentazione floating-point. Se uno dei due numeri non è rappresentabile allora incontrerai un errore prima di eseguire la somma. Nota che in pratica questa operazione avviene una sola volta quando converti da una rappresentazione diversa a floating-point e non ogni volta che esegui una operazione.
apatriarca
Moderatore
Moderatore
 
Messaggio: 5548 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid


Torna a Analisi Numerica e Ricerca Operativa

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite