IEEE-754

by Jerry Sky

2020-10-06



1. Reprezentacja liczby rzeczywistej w IEEE-754

Liczbę rzeczywistą x≠0x \neq 0, zgodnie ze standardem IEEE-754 zapiszemy: x=±m⋅2c=±(1.f)2⋅2c=±(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+2d−1−1 c_{KN} = c + \mathrm{bias} = c + 2^{d-1} - 1 stąd 0≤cKN≤2d−1c=cKN−bias 0 \le c_{KN} \le 2^d - 1\\ c = c_{KN} - \mathrm{bias}

schemat formatu ieee754


1.2. Wartości brzegowe

1≤cKN≤2d−21 \le c_{KN} \le 2^d - 2, ponieważ c=cKN−bias=cKN−(2d−1−1)c = c_{KN} - \mathrm{bias} = c_{KN} - (2^{d-1} - 1)

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

MINsub=2−(t−1)⋅2cmin⁡<MINnor=2cmin⁡≤∣rd(x)∣≤(2−2−(t−1))⋅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−=mt−1−2cx^- = m_{t-1}^- 2^c oraz x+=mt−1+2cx^+ = m^+_{t-1} 2^c będą sąsiadującymi liczbami maszynowymi. Wówczas: x+=(mt−1−+2−(t−1))2c,x−=mt−1−2c x^+ = (m^-_{t-1} + 2^{-(t-1)})2^c, \qquad x^- = m_{t-1}^- 2^c ∣x+−x−∣=2−(t−1)2c=2c−(t−1) |x^+ - x^-| = 2^{-(t-1)}2^c = 2^{c - (t-1)}

∣δ∣=∣rd(x)−x∣∣x∣≤12∣x+−x−∣∣x∣=122c−(t−1)∣mx2c∣≤122−(t−1)1=2−t=ϵ |\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} ϵ=2−t\epsilon = 2^{-t}
single 88 2424 1.4⋅10−451.4 \cdot 10^{-45} 1.2⋅10−381.2 \cdot 10^{-38} 3.4⋅10383.4 \cdot 10^{38} 5.96⋅10−85.96 \cdot 10^{-8}
double 1111 5353 4.9⋅10−3244.9 \cdot 10^{-324} 2.2⋅10−3082.2 \cdot 10^{-308} 1.8⋅103081.8 \cdot 10^{308} 1.11⋅10−161.11 \cdot 10^{-16}

1.3. Przykład

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

23=(0.10101010… )2≈(1.0101010…11)2⋅2−1 \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, f≠0c_{KN} = 255,~ f \neq 0)

([0 ∣ 11111111∣10000000000000000000000][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, f≠0c_{KN} = 0,~ f \neq 0)


3. Zaokrąglenie (Przykład)

Rozważamy arytmetykę single.

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

Sąsiednie liczby maszynowe

x−=1⋅20([0 ∣ 01111111 ∣ 00000000000000000000000])x=(1+2−24)⋅20([0 ∣ 01111111 ∣ 00000000000000000000000 ∣ 100… ])x+=(1+2−23)⋅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