Proprietà algebriche dei numeri macchina

É importante soffermarsi sul comportamento delle operazioni elementari in aritmetica finita.

Lavorando su numeri interi, se il risultato dell'operazione cade all'interno dell'insieme di rappresentabilità, le operazioni coincidono con quelle algebriche.

Considerando invece i numeri reali, le operazioni saranno definite solo su numeri di macchina e dovranno avere per risultato ancora un numero di macchina; ovvero ad esempio nel caso dell'addizione si ha che $ x \oplus y = fl(fl(x) + fl(y))$.

In particolare:

Teorema 2.7   In generale, nelle operazioni in macchina sui numeri reali non valgono la proprietà associativa e distributiva. L'unica proprietà algebrica che continua a valere è la proprietà commutativa.

Si userà la seguente notazione per indicare un'operazione macchina:

\begin{displaymath}
\odot =
\begin{cases}
\oplus \\
\otimes \\
\ominus \\
\oslash
\end{cases} \end{displaymath}

$\displaystyle x,y \in \nu, \quad x \odot y = fl^t(fl^t(x) \odot fl^t(y))
$

Teorema 2.8   Nell'insieme dei numeri macchina $ \mathbb{F}$ non vige l'unicità dell'elemento neutro dell'addizione.

Esempio 2.3   Un possibile controesempio si può costruire ponendo $ b = 10$ e $ t = 16$ e considerando:

$\displaystyle 1 + 10^{-16} $

Per rappresentare il risultato servirebbero 17 cifre di mantissa, ma $ t = 16$.

Allora, in macchina:

$\displaystyle 1 \oplus 10^{-16} = 1 $

Poichè l'ultima cifra viene arrotondata a 0.

$ 10^{-16}$ si comporta dunque da elemento neutro, in aggiunta a 0.

$ \qedsymbol$

Lemma 2.7  

$\displaystyle \varepsilon_m = min \left\{ \mu\in\mathbb{F}^+ : 1 \oplus \mu > 1 \right\} $

$ \varepsilon_m$ è ossia il più piccolo numero macchina che non si comporta come elemento neutro.

Teorema 2.9   Nell'insieme dei numeri macchina $ \mathbb{F}$ non vige la proprietà associativa.

Esempio 2.4   Siano $ b = 10$, $ U = 308$.

E' evidente che

$\displaystyle \frac{10^{200}10^{150}}{10^{100}} = 10^{250}$

Ma sebbene, correttamente,

$\displaystyle 10^{200} \otimes (10^{150} \oslash 10^{100}) = 10^{250} $

Eliminando le parentesi e dunque alterando l'ordine in cui vengono effettuate le operazioni, il risultato viene inficiato da un overflow che prima non si manifestava:

$\displaystyle \underbrace{10^{200} \otimes 10^{150}}_{=10^{350}\ \Rightarrow \text{overflow}} \oslash 10^{100} = \texttt{Inf}\oslash 10^{100} = \texttt{Inf}$

$ \qedsymbol$

Matteo Lisotto, Tobia Tesan - CC-BY 2.0