Działania arytmetyczne w arytmetyce fl

by Jerry Sky

2020-10-06



1. Reprezentacja liczb w fl

notatka «Numeryczna reprezentacja liczb»


2. Oznaczenia działań

Niech

będą liczbami w arytmetyce fl, wówczas przez fl(xy)=fl(xy) fl(x * y) = fl(x \circledast y) oznaczamy wynik działania xyx * y, gdzie {+,,/,}* \in \{+, -, /, \cdot\}, w arytmetyce fl.


3. Przykład

Mamy

Używamy akumulatora o podwójnej długości do pośrednich obliczeń.

x+y=po wyroˊwnaniu cech0.9289126000105zaokrągl.fl(x+y)=0.92891105 x + y \overset{\text{po wyrównaniu cech}}{=} 0.9289126000 \cdot 10^5\\ \xrightarrow{\text{zaokrągl.}} fl(x + y) = 0.92891 \cdot 10^5 xy=po wyroˊwnaniu cech0.9226274000105zaokrągl.fl(xy)=0.92263105 x - y \overset{\text{po wyrównaniu cech}}{=} -0.9226274000 \cdot 10^5\\ \xrightarrow{\text{zaokrągl.}} fl(x-y) = -0.92263 \cdot 10^5 xy=0.2909334802108zaokrągl.fl(xy)=0.29093108 x \cdot y = 0.2909334802 \cdot 10^8 \xrightarrow{\text{zaokrągl.}} fl(x \cdot y) = 0.29093 \cdot 10^8 xy0.3394579647102zaokrągl.fl(xy)=0.33946102 \frac{x}{y} \approx 0.3394579647 \cdot 10^{-2} \xrightarrow{\text{zaokrągl.}} fl\left(\frac{x}{y}\right) = 0.33946 \cdot 10^{-2}

3.1. Błędy

Błędy względne:

Precyzja arytmetyki:
ϵ=5105\epsilon = 5 \cdot 10^{-5}


4. Przykład (dodawanie kiedy xyx \gg y)

Niech

Wówczas: x+y=mxβcx+myβcy=(mx+myβ(cxcy))βcx=msβcx x + y = m_x\beta^{c_x} + m_y \beta^{c_y} = (m_x + m_y\beta^{-(c_x - c_y)}) \beta^{c_x} = m_s \beta^{c_x}

schemat liczb

Z powyższego rysunku wynika, że dla xyx \gg y
mamy fl(x+y)=xfl(x+y) = x.


5. Warunek na błędy

Arytmetyka fl powinna zapewnić równość fl(xy)=rd(xy) fl(x * y) = rd(x*y) dla {+,,/,}* \in \{+, -, /, \cdot\} oraz xy[MAX; MAX]x * y \in [-\mathrm{MAX};~ \mathrm{MAX}].

Jeśli powyższe jest prawdziwe, to zachodzi równość fl(xy)=(xy)(1+δ) fl(x * y) = (x*y)(1 + \delta) gdzie δϵ|\delta| \le \epsilon, ϵ=0.5β1t\epsilon = 0.5\beta^{1-t}


6. Przykład (narastający błąd po 33 działaniach)

Obliczymy x(y+z)x(y + z) w fl. (x=rd(x)x = rd(x), y=rd(y)y = rd(y), z=rd(z)z = rd(z))

fl(x(y+z))=fl(xfl(y+z))=[xfl(y+z)](1+δ1)=[x(y+z)(1+δ2)](1+δ1)=x(y+z)(1+δ2+δ1+δ2δ1)x(y+z)(1+δ2+δ1)=x(y+z)(1+δ3)fl(x(y+z)) = fl(x \cdot fl(y+z)) = [x \cdot fl(y+z)](1 + \delta_1) = [x(y+z)(1 + \delta_2)](1 + \delta_1) = x(y+z)(1 + \delta_2 + \delta_1 + \delta_2\delta_1) \approx x(y+z)(1+ \delta_2 + \delta_1) = x(y+z)(1+\delta_3)

gdzie δiϵ, i=1,2|\delta_i| \le \epsilon,~ i = 1,2, za to δ32ϵ|\delta_3| \le 2\epsilon


7. Twierdzenie#1

Jeśli i=1,,nδiϵ\forall i = 1,\dots,n \enspace |\delta_i| \le \epsilon oraz i=1n(1+δi)=1+En\prod_{i=1}^n(1 + \delta_i) = 1 + E_n oraz nϵ<2n_\epsilon < 2, wówczas En<nϵ10.5nϵnϵ |E_n| < \frac{n \epsilon}{1 - 0.5n\epsilon} \approx n\epsilon

7.1. D-d

En=i=1n(1+δi)1(1+ϵ)n1=1+(n1)ϵ+(n2)ϵ2+(n3)ϵ3++(nn)ϵn1=nϵ+nϵ(n1)ϵ2!+nϵ(n1)ϵ(n2)ϵ3!++nϵ(n1)ϵ1ϵn!=nϵ(1+(n1)ϵ2!+(n1)ϵ(n2)ϵ3!++(n1)ϵ1ϵn!)q=nϵ2<1En<nϵ(1+q+q2++qn1)=nϵ1qn1q<nϵ10.5nϵnϵ \begin{aligned} |E_n| &= \left|\prod_{i=1}^{n} (1 + \delta_i) - 1\right| \le (1 + \epsilon)^n - 1\\ &= 1 + \binom{n}{1}\epsilon + \binom{n}{2}\epsilon^2 + \binom{n}{3}\epsilon^3 + \dotsb + \binom{n}{n}\epsilon^n - 1\\ &= n\epsilon + \frac{n\epsilon(n-1)\epsilon}{2!} + \frac{n\epsilon(n-1)\epsilon(n-2)\epsilon}{3!} + \dotsb + \frac{n\epsilon(n-1)\epsilon\dotsb1\epsilon}{n!}\\ &= n\epsilon\left( 1 + \frac{(n-1) \epsilon}{2!} + \frac{(n-1)\epsilon(n-2)\epsilon}{3!} + \dotsb +\frac{(n-1) \epsilon \dotsb 1 \epsilon}{n!} \right)\\ &\qquad q = \frac{n\epsilon}{2} < 1\\ |E_n| &< n\epsilon(1 + q + q^2 + \dotsb + q^{n-1}) = n\epsilon \frac{1 - q^n}{1 - q} < \frac{n\epsilon}{1 - 0.5n\epsilon} \approx n\epsilon \quad \blacksquare \end{aligned}


8. Przykład (narastający błąd po nn działaniach)

Mamy:

Obliczyć:

Algorytm:

  1. S0=x0S_0 = x_0
  2. for i:=1i := 1 to nn do:
    1. Si:=Si1+xiS_i := S_{i-1} + x_i
  3. end for

fl(S)=fl(fl(fl(fl(x0+x1)+x2)+x3)++xn)=((((x0+x1)(1+δ1)+x2)(1+δ2)++x3)(1+δ3)++xn)(1+δn)=x0i=1n(1+δi)+x1i=1n(1+δi)++x2i=2n(1+δi)+x3i=3n(1+δi)++xn(1+δn) \begin{aligned} fl(S) &= fl(\dots fl(fl(fl(x_0 + x_1) + x_2) + x_3) + \dotsb + x_n)\\ &= (\dots (((x_0 + x_1)(1 + \delta_1) + x_2)(1 + \delta_2) +\\ &+ x_3)(1 + \delta_3) + \dotsb + x_n)(1 + \delta_n)\\ &= x_0 \prod_{i=1}^{n}(1 + \delta_i) + x_1\prod_{i=1}^{n}(1 + \delta_i)+\\ &+ x_2\prod_{i=2}^{n}(1+\delta_i) + x_3\prod_{i=3}^{n}(1+\delta_i) + \dotsb + x_n (1+\delta_n) \end{aligned} przy czym δiϵ, i=1,,n|\delta_i| \le \epsilon,~ i = 1,\dots, n.

Podstawmy i=kn(1+δi)=1+Ek\prod_{i=k}^{n}(1 + \delta_i) = 1+E_k: fl(S)=x0+x0E1+x1+x1E1+x2+x2E2+x3+x3E3++xn+xnEn=S+x0E1+x1E1+x2E2+x3E3++xnEnS+(x0+x1+x2+x3++xn)max1knEk=S(1+E1) \begin{aligned} fl(S) &= x_0 + x_0E_1 + x_1 + x_1E_1 + x_2 + x_2E_2 + x_3 + x_3E_3 + \dotsb + x_n + x_nE_n\\ &= S + x_0E_1 + x_1E_1 + x_2E_2 + x_3E_3 + \dotsb + x_nE_n\\ &\le S + (x_0 + x_1 + x_2 + x_3 + \dotsb + x_n)\max_{1 \le k \le n} E_k = S(1 + E_1) \end{aligned} gdzie E1<nϵ|E_1| < n\epsilon z «Twierdzenie#1».


9. Redukcja cyfr znaczących

Przeanalizujmy zjawisko redukcji cyfr znaczących:

xy[rd(x)rd(y)]xy=δxxδyyxyϵx+yxy \frac{|x - y - [rd(x) - rd(y)]|}{|x - y|} = \frac{|\delta_x x - \delta_y y|}{|x - y|} \le \epsilon\frac{|x| + |y|}{|x - y|}

Z powyższego oszacowania wynika, że niedokładność danych może przenieść się na wynik z wielkim mnożnikiem x+yxy\frac{|x| + |y|}{|x - y|} nawet gdy samo działanie nie wprowadza błędu.

9.1. Przykład

Niech

(xyx \approx y)

Różnica dokładna to xy=0.0001248121x - y = 0.0001248121.

Policzymy xyx - y w arytmetyce fl.

Zauważmy, że tutaj mamy fl(rd(x)rd(y))=rd(x)rd(y)fl(rd(x) - rd(y)) = rd(x) - rd(y).

δ=xy[rd(x)rd(y)]xy=0.00012481210.000130.00012481214.16102|\delta| = \frac{|x - y - [rd(x) - rd(y)]|}{|x - y|} = \frac{|0.0001248121 - 0.00013}{|0.0001248121|} \approx 4.16 \cdot 10^{-2}.

Precyzja arytmetyki ϵ=5105\epsilon = 5 \cdot 10^{-5}.


9.2. Przykład

Gdy liczymy wartość wyrażenia x2+11\sqrt{x^2 + 1} - 1 kiedy x\bold{|x|} jest mała.
W tym przypadku następuje redukcja cyfr znaczących.

Przekształćmy x2+11\sqrt{x^2 + 1} - 1: y=(x2+11)x2+1+1x2+1+1=x2x2+1+1. y = (\sqrt{x^2 + 1 } - 1) \frac{\sqrt{x^2 + 1} + 1}{\sqrt{x^2 + 1} + 1} = \frac{x^2}{\sqrt{x^2 + 1} + 1}.


10. Twierdzenie#2

Ile cyfr znaczących tracimy przy odejmowaniu xyx - y, kiedy xyx \approx y?

Jeśli xx i yy są dodatnimi liczbami w dwójkowej arytmetyce fl takimi, że x>yx > y oraz 2q1yx2p2^{-q} \le 1 - \frac{y}{x} \le 2^{-p}, wówczas
tracimy co najmniej pp i co najwyżej qq bitów przy odejmowaniu.

10.1. D-d

Niech xx oraz yy będą dwiema liczbami w dwójkowej arytmetyce fl, czyli x=mx2cx, y=my2cy,x = m_x 2^{c_x},~ y = m_y 2^{c_y},; mx,my[12; 1)m_x, m_y \in \left[\frac{1}{2};~ 1\right).

Ponieważ x>yx > y, to aby obliczyć różnicę r=xyr = x-y musimy wyrównać cechy: r=mx2cxmy2cy=(mxmy2cycx)2cx=mr2cx r = m_x 2^{c_x} - m_y 2^{c_y} = (m_x - m_y 2^{c_y - c_x})\cdot 2^{c_x} = m_r 2^{c_x}

Mantysa mrm_r spełnia mr=(mxmy2cycx)=mx(1my2cymx2cx)=mx(1yx)<2p. m_r = (m_x - m_y 2^{c_y - c_x}) = m_x \left( 1 - \frac{m_y 2^{c_y}}{m_x 2^{c_x}} \right) = m_x\left( 1 - \frac{y}{x} \right) < 2^{-p}.

Aby znormalizować reprezentację xyx - y w arytmetyce fl, musimy przesunąć mantysę mrm_r o co najmniej pp bitów w lewo. Wówczas wprowadzone są zera (na prawo), które nie niosą żadnej informacji. Co oznacza redukcję pp znaczących bitów.

Rozumowanie dla drugiej części jest podobne.