Cancellazione numerica

vik3
Salve a tutti, pensando al fenomeno della cancellazione numerica che si verifica in caso di sottrazione operando in floating point in un calcolatore fra numeri molto vicini, in quale fra queste espressioni si potrebbe verificare:

\(\displaystyle y=1+cos x\)
\(\displaystyle y=1- cos x\)
\(\displaystyle y=1-1/2(cos^2 x)\)

Mi verrebbe da dire sia la prima che la seconda (visto che cos è peridica) poichè per valori molto piccoli di x il coseno assume valori molto prossimi a 1 e quindi la differenza con 1 sarebbe molto piccola e con calcolatori con un numero di decimali limitato potrei avere di fatto 0, quindi estremizzando una perdita totale di cifre significative e non.
Che ne dite, sta in piedi?
Grazie

Risposte
walter891
secondo me potrebbe essere la terza perchè si sottrae ad $1$ un numero ancora più piccolo che nella seconda

dissonance
Ma no, walter. La terza espressione si può valutare senza patemi d'animo, a meno che non si abbia un calcolatore talmente scalcagnato da sbagliare addirittura il segno di \(\cos^2x\).

Invece la prima e la seconda possono essere molto problematiche. Ad esempio se stiamo parlando di angoli dell'ordine del centesimo di radiante, \(\cos \theta\) oscillerà, grosso modo, tra \(0.99995\) e \(1\). Un calcolatore preciso fino alla quarta cifra decimale allora non riconoscerà alcuna differenza tra \(\cos \theta\) e \(1\), e quindi dirà sempre che \(1-\cos \theta=0\). Ma nell'ordine di grandezza scelto, \(\theta=1\times 10^{-2}\) e \(\theta=0\) sono grandezze completamente diverse, tanto quanto \(1\) e \(0\). Il nostro programma allora sarà attendibile quanto uno che non ti sa distinguere lo zero dall'uno: completamente da buttare.

Stesso problema con la prima espressione.

vik3
Grazie a Dissonance, spiegazione molto convincente!
Grazie anche al contributo di Walter che mi ha fatto dubitare sul mio ragionamento.

Bye

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.