# lista 3 ASK ## Zad 2 IEEE 754-2008 float  ###### Źródło:`wikipedia.org` $1,5625 × 10^{-1} = 0,15625 = 0.00101_{2} = 1.01_{2} × 2^{-3}$ $exp = E + Bias$ $exp = -3 + 2^{5-1} -1 = 12$ $frac = 0100000000$ Zakodowana $1,5625 × 10^{-1}$: |0|01100|0100000000| |-|-----|----------| Zakres: Najmniejsza reprezentowalna: $-(1 - ε) × 2^{15} = -65504$ Największa ujemna: zdenormalizowana: $-2^{-24}$ znormalizowana: $-2^{-14} ≈ 6.10 × 10^{-5}$ Najmniejsza dodatnia: zdenormalizowana: $2^{-24}$ znormalizowana: $2^{-14} ≈ 6.10 × 10^{-5}$ Największa reprezentowalna: $(1 - ε) × 2^{15} = 65504$ Gdzie $ε = \frac{1}{1024}$; Precyzja we 16-bitowym floatcie to 10 bitów, a w 32-bitowym floacie to 23 bity. ## Zad 3 $3.984375_{10} × 10^{-1} + 3.4375_{10} × 10^{-1} + 1.771_{10} × 10^{3}$ Najpierw dostosowujemy liczby do naszej reprezentacji: $3.984375_{10} × 10^{-1} = 0.3984375_{10} = $ $1.10011_{2} × 2^{-2} + 1.011 × 2^{-2} + 1.1011101011_{2} × 2^{10}=$ $1.011111_{2} × 2^{-1} + 1.1011101011_{2} × 2^{10}=$ $(0.00000000001011111_{2} + 1.1011101011_{2})× 2^{10}=$ $1.101110101110_{2} × 2^{10} = 1.10111011_{2} × 2^{10} = 1772_{10}$ Zamieniając kolejność: $1.011 × 2^{-2} + 1.1011101011_{2} × 2^{10} + 1.10011_{2} × 2^{-2}=$ $(0.000000000001011 + 1.1011101011_{2})× 2^{10} + 1.10011_{2} × 2^{-2}=$ $1.1011101011_{2} × 2^{10} + 1.10011_{2} × 2^{-2} =$ $1.1011101011_{2} × 2^{10} = 1771_{10}$ ## Zad 5 Reprezentacje binarne liczb zmiennoprzecinkowych f i g typu «float» zostały załadowane odpowiednio do zmiennych «x» i «y» typu «uint32_t». Przyjmujemy $−0 ≡ +0$. Podaj wyrażenie, które: #### 1.Zmieni znak liczby «x» ```C x ^ (1<<32) ``` #### 2.Obliczy wartość $⌊log_{2}|f|⌋$ typu «int» dla f w postaci znormalizowanej $⌊log_{2}|f|⌋ = ⌊log_{2}|2^{E} × M|⌋ = ⌊log_{2}2^{E} + log_{2}M⌋ =$ $log_{2}2^{E} + ⌊log_{2}M⌋ = E$ ```C Ustawienie bitu znaku na 0: (f & 0x7FFFFFFF) Wyodrębnienie exp: ((f & 0x7FFFFFFF) >> 23) Uzyskanie wykładnika (E = exp - Bias): ((f & 0x7FFFFFFF) >> 23) - (1<<31) - 1 ``` #### 3.Zwróci wartość logiczną operacji «x == y», ```C x == y | x == (1 << 32) & y == 0 | x == 0 & y == (1 << 32) ``` #### 4.Zwróci wartość logiczną operacji «x < y». x < y gdy: (znak liczby float, która została załadowana do x) 1. x oraz y są tego samego znaku oraz x < y: ```C ~(x^y) >> 32 - da nam 1 gdy bity znaku są równe i 0 gdy są różne (~x&y) | ((~x|y) & (x-y)) - da nam 1, gdy x < y z poprzedniej listy ``` 2. x jest ujemne a y jest dodanie oraz x ≠ -0 oraz y ≠ +0: ```C x >> 32 - wyodrębni bit znaku (jeśli ujemna to 1, wpp 0) ~y >> 32 - zwróci przeciwny do znaku bit (jeśli dodatnia 1, wpp 0) x == 1 << 32 & y != 0 ``` Całe wyrażenie: ```C ((~(x^y) >> 32) & x < y) | (x >> 32 & ~y >> 32) | (x == 1 << 32 & y != 0) ``` ###### tags: `ask`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up