Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Asi budeme předpokládat, že nemůžeme použít bitové operace v jazyce + to číslo v daném formátu uložené nebude.
Takže nejdříve bych odělil část před desetinnou čárkou a část za ní - na to má každý jazyk funkci, nejpravděpodobněji floor.
Číslo před čárkou je floor(cislo) a číslo za čárkou je (cislo - floor(cislo))
Kdyby bylo číslo unsigned (bez znaménka), tak algoritmus projede všechny bity od nejvyššího:
128 - je menší než 89? ne = 0
64 - je menší než 89? ano = 1 (odečtu 64)
32 - je menší než 25? ne = 0
16 - je menší než 25? ano = 1 (odečtu 16)
8 je menší než 9? ano = 1 (odečtu 9)
4 je menší než 1? ne = 0
2 je menší než 1? ne = 0
1 je rovno 1 = 1
číslo před čárkou pak je 01011001. Pokud jde ale o signed číslo a je záporné, tak první bit bude 1 a bude představovat záporné číslo tedy -128
algoritmus tedy jede obdobně, nicméně od testovaného čisla odečte 128, takže hledá rozdíl, což je 39:
-128 = 1
64 - ne = 0
32 - ano = 1 (7)
16 - ne = 0
8 - ne = 0
4 - ano = 1 (3)
2 - ano = 1 (1)
1 - ano = 1
číslo před čárkou je 10100111
Potom pokračujeme u části za čárkou. Tam platí, že první bit je 2 na mínus prvou (tj 1/2), druhý bit je 2 na mínus druhou (tj 1/4) atd. Postupujeme tedy následovně:
1/2 je menší než 0,368? ne = 0
1/4 je menší než 0,368? ano = 1 (odečtu 0,25)
1/8 je menší než 0,118? ne = 0
1/16 je menší než 0,118? ano = 1 (odečtu 0.0625)
1/32 je menší než 0.0555? ano = 1 (odečtu 0.03125)
1/64 je menší než 0.02425? ano = 1 (odečtu 0.015625)
1/128 je menší než 0.008625? ano = 1 (odečtu 0.0078125)
1/256 je menší než 0.0008125? ne = 0 (víc bitů nemáme)
potom to je odspodu (2 + 4 + 8 + 16 + 64) / 256 = 94 / 256
když těch 368 / 1000 převedeme na základ 256 - tak vyjde 94.208 / 256 - takže snažit se toto číslo vyjádřit v dvojkové soustavě, zaokrouhleno nahoru nebo dolů, může být taky cesta.
Číslo tedy je v Q7,8 10100111_01011110
Offline