Salta al contenuto
Note per Studenti Esercizio - Cancellazione in (1 - cos x)/x2 con cinque cifre significative

Esercizio - Cancellazione in (1 - cos x)ᐟx^2 con cinque cifre significative

In questa pagina 3

Teoria: Aritmetica di macchina - floating point, precisione di macchina e cancellazioneUn calcolatore rappresenta solo un insieme finito di numeri F(β,t,L,U); ogni numero reale viene arrotondato con errore relativo al più u = ½β^(1−t) (u ≈ 1,1·10⁻¹⁶ in doppia precisione) e ogni operazione è esatta più un errore (1+δ), |δ| ≤ u. Conseguenze: overflow e underflow, somma non associativa, assorbimento, e soprattutto la cancellazione numerica nella differenza di numeri quasi uguali, che si evita riformulando l'espressione.Aritmetica di macchina - floating point, precisione di macchina e cancellazione →; per il limite si usa Sviluppi di Mac-Laurin notevoliTabella degli sviluppi di Mac-Laurin da sapere a memoria (e^x, sin, cos, log(1+x), (1+x)^alpha, arctan, sinh, cosh, tan) e regole per combinarli: algebra degli o piccoli, prodotti, funzioni composte, quanti termini tenere.Sviluppi di Mac-Laurin notevoli →.

Testo

Si vuole calcolare f(x)=1−cos⁡xx2f(x) = \dfrac{1 - \cos x}{x^2} per xx piccolo con una macchina che arrotonda ogni risultato a 55 cifre significative decimali.

  • (a) Calcolare f(x)f(x) con la formula diretta per x=0,1x = 0{,}1, 0,010{,}01, 0,0010{,}001 e confrontare con il valore esatto.
  • (b) Riscrivere ff senza sottrazione e ripetere il calcolo.
  • (c) Dedurre dallo sviluppo di Mac-Laurin il valore esatto di ff per x→0x \to 0 e il suo comportamento per xx piccolo.
  • (d) Domanda teorica: quante cifre significative si perdono nel passaggio 1−cos⁡x1 - \cos x per x=0,01x = 0{,}01?

Soluzione

(a) Formula diretta

Per ogni xx si calcola cos⁡x\cos x, lo si arrotonda a 55 cifre, si sottrae da 11, si divide per x2x^2.

xx cos⁡x\cos x esatto cos⁡x\cos x a 5 cifre 1−cos⁡x1 - \cos x f(x)f(x) calcolato f(x)f(x) esatto
0,10{,}1 0,99500420{,}9950042 0,995000{,}99500 0,005000{,}00500 0,500000{,}50000 0,4995830{,}499583
0,010{,}01 0,999950000{,}99995000 0,999950{,}99995 0,000050{,}00005 0,500000{,}50000 0,4999960{,}499996
0,0010{,}001 0,99999950{,}9999995 1,00001{,}0000 00 00 0,499999960{,}49999996

(Per x=0,1x = 0{,}1: 0,005000,01=0,500\frac{0{,}00500}{0{,}01} = 0{,}500. Per x=0,01x = 0{,}01: 0,000050,0001=0,5\frac{0{,}00005}{0{,}0001} = 0{,}5. Per x=0,001x = 0{,}001: il coseno 0,99999950{,}9999995 a 55 cifre significative diventa 1,00001{,}0000 e la differenza è 00.)

L'errore relativo è 8⋅10−48 \cdot 10^{-4} per x=0,1x=0{,}1 e 8⋅10−68 \cdot 10^{-6} per x=0,01x=0{,}01 (qui il risultato 0,50{,}5 ha una sola cifra significativa, che per fortuna è giusta: la differenza 1−cos⁡x=0,000051-\cos x = 0{,}00005 non porta informazione oltre la prima cifra), e arriva al 100% per x=0,001x = 0{,}001: tutte le cifre sono perse.

(b) Formula senza sottrazione

L'identità 1−cos⁡x=2sin⁡2x21 - \cos x = 2\sin^2\frac x2 (dalla formula di bisezione del coseno) dà f(x)=2sin⁡2(x/2)x2.f(x) = \frac{2\sin^2(x/2)}{x^2}. Qui non ci sono differenze di numeri vicini. Per x=0,1x = 0{,}1: sin⁡0,05=0,049979→0,049979\sin 0{,}05 = 0{,}049979 \to 0{,}049979; quadrato 0,00249790{,}0024979; doppio 0,00499580{,}0049958; diviso 0,010{,}01: 0,49958\mathbf{0{,}49958} ✓ (esatto 0,4995830{,}499583). Per x=0,01x = 0{,}01: sin⁡0,005=0,0049999792→0,0050000\sin 0{,}005 = 0{,}0049999792 \to 0{,}0050000; quadrato 0,0000250000{,}000025000; doppio 0,0000500000{,}000050000; diviso 0,00010{,}0001: 0,50000\mathbf{0{,}50000} (esatto 0,4999960{,}499996: 5 cifre corrette). Per x=0,001x = 0{,}001: sin⁡0,0005→0,00050000\sin 0{,}0005 \to 0{,}00050000; quadrato 2,5000⋅10−72{,}5000 \cdot 10^{-7}; doppio 5,0000⋅10−75{,}0000 \cdot 10^{-7}; diviso 10−610^{-6}: 0,50000\mathbf{0{,}50000} ✓.

(c) Valore esatto

Da cos⁡x=1−x22+x424−…\cos x = 1 - \frac{x^2}{2} + \frac{x^4}{24} - \dots: 1−cos⁡x=x22−x424+…⟹f(x)=12−x224+⋯→12.1 - \cos x = \frac{x^2}{2} - \frac{x^4}{24} + \dots \quad\Longrightarrow\quad f(x) = \frac12 - \frac{x^2}{24} + \dots \to \frac12. Controllo: per x=0,1x = 0{,}1, 12−0,0124=0,49958333\frac12 - \frac{0{,}01}{24} = 0{,}49958333 ✓.

(d) Cifre perse

Per x=0,01x = 0{,}01: cos⁡x=0,99995000…\cos x = 0{,}99995000\ldots ha 55 cifre significative, ma la differenza 1−cos⁡x=0,000051 - \cos x = 0{,}00005 ne ha una sola (55). Il fattore di amplificazione ∣1∣+∣cos⁡x∣∣1−cos⁡x∣≈25⋅10−5=4⋅104\frac{|1| + |\cos x|}{|1 - \cos x|} \approx \frac{2}{5\cdot 10^{-5}} = 4\cdot 10^4 dice che si perdono circa 44 cifre (su 55).

Risultato. La formula diretta fallisce per x=0,001x = 0{,}001 (dà 00 invece di 0,50{,}5); la formula 2sin⁡2(x/2)x2\frac{2\sin^2(x/2)}{x^2} dà 0,50000\mathbf{0{,}50000}, con limite esatto 12\mathbf{\tfrac12}.

Errori tipici

  • Pensare che aumentando le cifre del coseno il problema sparisca: lo sposta soltanto (a x=10−8x = 10^{-8} in doppia precisione si ricade nello stesso caso).
  • Calcolare a mano cos⁡x\cos x con più cifre del dovuto e poi "arrotondare" la differenza: l'arrotondamento va fatto sul coseno, prima della sottrazione.

Versione ripasso

(a) Formula diretta, 55 cifre (Sviluppi di Mac-Laurin notevoliTabella degli sviluppi di Mac-Laurin da sapere a memoria (e^x, sin, cos, log(1+x), (1+x)^alpha, arctan, sinh, cosh, tan) e regole per combinarli: algebra degli o piccoli, prodotti, funzioni composte, quanti termini tenere.Sviluppi di Mac-Laurin notevoli → per il limite):

xx cos⁡x\cos x a 5 cifre 1−cos⁡x1-\cos x ff calcolato ff esatto
0,10{,}1 0,995000{,}99500 0,005000{,}00500 0,500000{,}50000 0,4995830{,}499583
0,010{,}01 0,999950{,}99995 0,000050{,}00005 0,50{,}5 0,4999960{,}499996
0,0010{,}001 1,00001{,}0000 00 00 0,499999960{,}49999996

Per x=0,001x=0{,}001 errore relativo 100%100\%.

(b) 1−cos⁡x=2sin⁡2x21-\cos x=2\sin^2\frac x2, quindi f=2sin⁡2(x/2)x2f=\frac{2\sin^2(x/2)}{x^2}.

  • x=0,1x=0{,}1: sin⁡0,05=0,049979\sin0{,}05=0{,}049979, quadrato 0,00249790{,}0024979, doppio 0,00499580{,}0049958, diviso 0,010{,}01: 0,499580{,}49958.
  • x=0,001x=0{,}001: sin⁡0,0005=0,00050000\sin0{,}0005=0{,}00050000, quadrato 2,5⋅10−72{,}5\cdot10^{-7}, doppio 5⋅10−75\cdot10^{-7}: 0,500000{,}50000.

(c) f(x)=12−x224+⋯→12f(x)=\frac12-\frac{x^2}{24}+\dots\to\frac12; per x=0,1x=0{,}1: 0,499583330{,}49958333.

(d) A x=0,01x=0{,}01: amplificazione 1+∣cos⁡x∣1−cos⁡x≈25⋅10−5=4⋅104\frac{1+|\cos x|}{1-\cos x}\approx\frac{2}{5\cdot10^{-5}}=4\cdot10^4, circa 44 cifre perse su 55.

Errori tipici: pensare che più cifre del coseno risolvano (si sposta il problema); arrotondare la differenza invece del coseno prima della sottrazione.

Teoria collegata