next up previous contents index
Next: 1.4 Propagazione degli errori Up: 1. Teoria dell' errore Previous: 1.2 Precisione di macchina   Indice   Indice analitico

1.3 Operazioni di macchina

Siano \bgroup\color{darkgreen}$a, \,b$\egroup due numeri appartenenti ad un particolare sistema floating point \bgroup\color{darkgreen}$F(\beta,t,L,U)$\egroup.
Definiamo:
Somma di macchina
$a \oplus b = fl(a+b)$
Differenza di macchina
$a \ominus b = fl(a-b)$
Prodotto di macchina
$a \otimes b = fl(a\cdot b)$
Quoziente di macchina
$a \oslash b = fl(a/b)$
Dimostriamo ora che se \bgroup\color{darkgreen}$a, \, b, \, c \in F$\egroup allora

\begin{displaymath}\bgroup\color{darkgreen}
\underbrace{(a \oplus b) \oplus c}_{y_A} \neq \underbrace{a \oplus (b \oplus c)}_{y_B}
\egroup\end{displaymath}

Calcoliamo adesso il valore di \bgroup\color{darkgreen}$y_A$\egroup:
$\displaystyle y_A$ $\textstyle =$ $\displaystyle fl(fl(a+b)+c)=fl((a+b)(1+\varepsilon_{1A})+c)=$  
  $\textstyle =$ $\displaystyle [(a+b)(1+\varepsilon_{1A})+c](1+\varepsilon_{2A})=$  
  $\textstyle =$ $\displaystyle [a+b+c+\varepsilon_{1A}(a+b) + \varepsilon_{2A}(a+b+c)+\varepsilon_{1A}\varepsilon_{2A}(a+b)]$  

L' errore relativo è pertanto (ignorando la quantit? \bgroup\color{darkgreen}$\varepsilon_{1A}\varepsilon_{2A}(c+b)$\egroup)1.2:

\begin{displaymath}\bgroup\color{darkgreen}
\left\vert\frac{y_A - y}{y}\right\v...
...\varepsilon_{2A} + %
\varepsilon_{1A}\frac{a+b}{a+b+c}
\egroup\end{displaymath}

Procediamo adesso nel calcolo del valore di \bgroup\color{darkgreen}$y_B$\egroup:
$\displaystyle y_B$ $\textstyle =$ $\displaystyle fl(a+fl(b+c))=fl(a+(b+c)(1+\varepsilon_{1B}))=$  
  $\textstyle =$ $\displaystyle [a+(b+c)(1+\varepsilon_{1B})](1+\varepsilon_{2B})=$  
  $\textstyle =$ $\displaystyle [a+b+c+\varepsilon_{1B}(b+c) + \varepsilon_{2B}(a+b+c)+\varepsilon_{1B}\varepsilon_{2B}(c+b)]$  

L' errore relativo è quindi (ignorando come prima l'errore di seconda specie):

\begin{displaymath}\bgroup\color{darkgreen}
\left\vert\frac{y_B - y}{y}\right\v...
...\varepsilon_{2B} + %
\varepsilon_{1B}\frac{b+c}{a+b+c}
\egroup\end{displaymath}

$$ Esempio 1.6   Siano $\beta=10$ e $t=4$. Prendiamo $a=0.3124 \cdot 10^3$,
$b=0.2631 \cdot 10^{-1}$, $c=0.4122 \cdot 10^{-1}$; calcoliamo $y_A$:

\begin{displaymath}
a+b=0.31242631 \cdot 10^3 \Rightarrow a \oplus b = 0.3124 \cdot 10^3
\end{displaymath}


\begin{displaymath}
(a \oplus b)+c=0.31244122 \cdot 10^3 \Rightarrow (a \oplus b) \oplus c = 0.3124 \cdot 10^3
\end{displaymath}

Se calcoliamo invece $y_B$ otteniamo:

\begin{displaymath}
b+c=0.6753\cdot 10^{-1} \Rightarrow b \oplus c=0.6753\cdot 10^{-1}
\end{displaymath}


\begin{displaymath}
a+(b \oplus c)= 0.31246753 \cdot 10^{3} \Rightarrow a \oplus (b \oplus c)=0.3125 \cdot 10^{3}
\end{displaymath}

Controlliamo i valori dell'errore relativo per entrambi gli algoritmi:

\begin{displaymath}
\left\vert\frac{y_A - y}{y}\right\vert=\frac{0.6753 \cdot 10^{-1}}{0.31246753 \cdot 10^3} \approx 0.21 \cdot 10^{-3}
\end{displaymath}


\begin{displaymath}
\left\vert\frac{y_B - y}{y}\right\vert=\frac{0.3247 \cdot 10^{-1}}{0.31246753 \cdot 10^3} \approx 0.11 \cdot 10^{-3}
\end{displaymath}

$$ Esempio 1.7   Vediamo come si comporta la differenza di quadrati, sempre con gli stessi valori. Dimostriamo che

\begin{displaymath}
(a\otimes a)\ominus(b\otimes b) \neq (a\oplus b) \otimes (a\ominus b)
\end{displaymath}

Come nell'esempio precedente, calcoliamo $y_{A}$ e $y_{B}$ con i relativi errori:
$\displaystyle y_{A}$ $\textstyle =$ $\displaystyle fl(fl(a\cdot a)-fl(b\cdot b))=fl((a\cdot a)(1+\varepsilon_{1A})-(b\cdot b)(1+\varepsilon_{2A}))=$  
  $\textstyle =$ $\displaystyle \left[a^2 (1+\varepsilon_{1A})-b^2 (1+\varepsilon_{2A})\right](1+\varepsilon_{3A})=$  
  $\textstyle \cong$ $\displaystyle (a^2+b^2+a^2\varepsilon_{1A}-b^2\varepsilon_{2A}+(a^2-b^2)\varepsilon_{3A})$  


\begin{displaymath}
\frac{y_A - y}{y}=\frac{a^2}{a^2 - b^2}\varepsilon_{1A}-\frac{b^2}{a^2 - b^2}\varepsilon_{2A}+
\varepsilon_{3A}
\end{displaymath}


\begin{displaymath}
\left\vert\frac{y_A - y}{y}\right\vert\le eps\left(1+\frac{...
...\vert a^2 - b^2\vert}+\frac{b^2}{\vert a^2 - b^2\vert}\right)
\end{displaymath}


$\displaystyle y_{B}$ $\textstyle =$ $\displaystyle fl(fl(a+b)\cdot fl(a-b))=
\left[(a+b)(1+\varepsilon_{1B})(a-b)(1+\varepsilon_{2B})\right](1+\varepsilon_{3B})=$  
  $\textstyle =$ $\displaystyle (a^2-b^2)(1+\varepsilon_{1B})(1+\varepsilon_{2B})(1+\varepsilon_{3B})=$  
  $\textstyle \cong$ $\displaystyle (a^2-b^2)(1+\varepsilon_{1B}+\varepsilon_{2B}+\varepsilon_{3B})$  


\begin{displaymath}
\frac{y_B - y}{y}=\varepsilon_{1B}+\varepsilon_{2B}+\varepsilon_{3B}
\end{displaymath}


\begin{displaymath}
\left\vert\frac{y_B - y}{y}\right\vert\le 3\cdot eps\
\end{displaymath}

Abbiamo quindi mostrato che se \bgroup\color{darkgreen}$\left(\frac{a^2}{\vert a^2 - b^2\vert}+\frac{b^2}{\vert a^2 - b^2\vert}\right)>2$\egroup allora ? pi? conveniente utilizzare l'algoritmo \bgroup\color{darkgreen}$B$\egroup.
next up previous contents index
Next: 1.4 Propagazione degli errori Up: 1. Teoria dell' errore Previous: 1.2 Precisione di macchina   Indice   Indice analitico
2005-02-09