IEEE-754

by Jerry Sky

2020-10-06



1. Reprezentacja liczby rzeczywistej w IEEE-754

Liczbę rzeczywistą x0x \neq 0, zgodnie ze standardem IEEE-754 zapiszemy: x=±m2c=±(1.f)22c=±(1.a1,a2,)2c x = \plusmn m\cdot 2^c = \plusmn (1.f)_2 \cdot 2^c = \plusmn (1.a_1,a_2,\dots) \cdot 2^c gdzie

Niech


1.1. Cecha

Stosowany jest kod z nadmiarem w zapisie cc: cKN=c+bias=c+2d11 c_{KN} = c + \mathrm{bias} = c + 2^{d-1} - 1 stąd 0cKN2d1c=cKNbias 0 \le c_{KN} \le 2^d - 1\\ c = c_{KN} - \mathrm{bias}

schemat formatu ieee754


1.2. Wartości brzegowe

1cKN2d21 \le c_{KN} \le 2^d - 2, ponieważ c=cKNbias=cKN(2d11)c = c_{KN} - \mathrm{bias} = c_{KN} - (2^{d-1} - 1)

Ostatecznie rzeczywisty zakres cechy jest następujący: cmin=2d1+2c2d11=cmax c_{\min} = -2^{d-1} + 2 \le c \le 2^{d-1} - 1 = c_{\max}

MINsub=2(t1)2cmin<MINnor=2cminrd(x)(22(t1))2cmax=MAX\mathrm{MIN}_{sub} = 2^{-(t-1)} \cdot 2^{c_{\min}} < \mathrm{MIN}_{nor} = 2^{c_{\min}} \le |rd(x)| \le (2 - 2^{-(t-1)}) \cdot 2^{c_{\max}} = \mathrm{MAX}


Niech x=mt12cx^- = m_{t-1}^- 2^c oraz x+=mt1+2cx^+ = m^+_{t-1} 2^c będą sąsiadującymi liczbami maszynowymi. Wówczas: x+=(mt1+2(t1))2c,x=mt12c x^+ = (m^-_{t-1} + 2^{-(t-1)})2^c, \qquad x^- = m_{t-1}^- 2^c x+x=2(t1)2c=2c(t1) |x^+ - x^-| = 2^{-(t-1)}2^c = 2^{c - (t-1)}

δ=rd(x)xx12x+xx=122c(t1)mx2c122(t1)1=2t=ϵ |\delta| = \frac{|rd(x) - x|}{|x|} \le \frac{1}{2} \frac{|x^+ - x^-|}{|x|} = \frac{1}{2}\frac{2^{c-(t-1)}}{|m_x 2^c|} \le \frac{1}{2} \frac{2^{-(t-1)}}{1} = 2^{-t} = \epsilon

format d t MINsub\mathrm{MIN}_{sub} MINnor\mathrm{MIN}_{nor} MAX\mathrm{MAX} ϵ=2t\epsilon = 2^{-t}
single 88 2424 1.410451.4 \cdot 10^{-45} 1.210381.2 \cdot 10^{-38} 3.410383.4 \cdot 10^{38} 5.961085.96 \cdot 10^{-8}
double 1111 5353 4.9103244.9 \cdot 10^{-324} 2.2103082.2 \cdot 10^{-308} 1.8103081.8 \cdot 10^{308} 1.1110161.11 \cdot 10^{-16}

1.3. Przykład

Wyznacz reprezentację x=23x = \frac{2}{3} w formacie single (t1=23, d=8t-1 = 23,~ d = 8).

23=(0.10101010)2(1.010101011)221 \frac{2}{3} = (0.10101010\dots)_2 \approx (1.0101010\dots11)_2 \cdot 2^{-1}

c=1, cKN=c+bias=c+127;cKN=126=(01111110)2c = -1,~ c_{KN} = c + \mathrm{bias} = c + 127; \quad c_{KN} = 126 = (01111110)_2

23[0  01111110  01010101010101010101011] \frac{2}{3} \approx [0 ~|~ 01111110 ~|~ 01010101010101010101011 ]

Julia lang: bitstring(Float32(2/3))


2. Symbole specjalne

(w nawiasach podane są wielkości w formacie single)

2.1. Zera

cKN=0,f=0c_{KN} = 0, f = 0

2.2. Nieskończoności

2.3. NaN

(cKN=255, f0c_{KN} = 255,~ f \neq 0)

([0  1111111110000000000000000000000][0 ~|~ 11111111 | 10000000000000000000000])

NaN pojawia się w sytuacjach:

2.4. Liczby denormalizowane

x(MINnor; MINsub][MINsub; MINnor)x \in (-\mathrm{MIN}_{nor};~-\mathrm{MIN}_{sub}] \cup [\mathrm{MIN}_{sub};~ \mathrm{MIN}_{nor})

(cKN=0, f0c_{KN} = 0,~ f \neq 0)


3. Zaokrąglenie (Przykład)

Rozważamy arytmetykę single.

x=(1+224)20 x = (1 + 2^{-24}) \cdot 2^0

Sąsiednie liczby maszynowe

x=120([0  01111111  00000000000000000000000])x=(1+224)20([0  01111111  00000000000000000000000  100])x+=(1+223)20([0  01111111  00000000000000000000001]) \begin{aligned} x^- & = 1 \cdot 2^0 \quad ([0 ~|~ 01111111 ~|~ 00000000000000000000000])\\ x & = (1 + 2^{-24}) \cdot 2^0 \quad ([0 ~|~ 01111111 ~|~ 00000000000000000000000 ~|~ \bold{1}00 \dots])\\ x^+ & = (1 + 2^{-23}) \cdot 2^0 \quad ([0 ~|~ 01111111 ~|~ 0000000000000000000000\bold{1}]) \end{aligned}

rd(x)=x=1rd(x) = x^- = 1