BitLab vzorek, který se někdo zeptá

Tohle je statická kopie kapitoly pro vyhledávače. Interaktivní verze má animované obrázky, kontrolní otázky a tlačítka, která příklad načtou do kalkulačky.

Pevná řádová čárka: co se používá, když float nestačí

Plovoucí čárka má proměnný krok a stojí to hardware. Pevná řádová čárka je celé číslo, u kterého se všichni dohodli, kde je čárka — a nikde se to neukládá, je to jen dohoda v hlavě programátora a v komentáři.

hodnota = celé_číslo / 2qq bitů za čárkou

Zápis Qm.n říká, kolik bitů je před čárkou a kolik za ní. Q15 znamená jeden znaménkový bit a patnáct za čárkou, tedy rozsah −1 až téměř +1 — a je to nejběžnější formát ve zvuku a v regulaci motorů, protože všechno normalizované na plný rozsah do něj sedí.

pevná čárkaplovoucí čárka
krokvšude stejnýroste s velikostí čísla
rozsahúzký a známý předemobrovský
sčítáníobyčejná celočíselná sčítačkapotřebuje zarovnat exponenty
násobenívyjde 2× širší, musí se posunouthardware to udělá
chování na krajiobtočí se nebo se ořízne — na programátorovinekonečno

Dvě věci, které se u pevné čárky musí hlídat

Násobení mění formát. Q15 × Q15 dá Q30 — dvakrát tolik bitů za čárkou. Aby výsledek zůstal Q15, musí se posunout o 15 doprava, a ten mezivýsledek musí mít místo, kde existovat. V šestnáctibitovém procesoru to znamená 32bitový akumulátor.

Q15 × Q15 = Q30  →  (a · b) >> 15 = Q15a mezivýsledek musí být 32bitový

Přetečení se musí ošetřit, ne nechat obtéct. Ve zvuku je rozdíl slyšet: obtočení z maximální kladné na maximální zápornou hodnotu je prásknutí, kdežto saturace — zůstat na kraji — je zkreslení, které je nepříjemné, ale ne destruktivní. Signálové procesory proto mají saturační aritmetiku v hardwaru.

Kde na to narazíte v týhle akademii: regulátor z ControlLabu běžící na osmibitovém mikrokontroléru bez FPU se píše v pevné čárce. Integrační složka je tam akumulátor, který se musí saturovat — a to je přesně ten windup, o kterém má ControlLab kapitolu. Tady je vidět, proč ten limit musí být, i kdyby regulátor byl dokonalý: ten akumulátor má konečnou šířku.

Vzorce v této kapitole

Qn — pevná řádová čárka
x = i / 2ⁿ [—] kap. 10
× — násobení mění formát
Q15 · Q15 = Q30 [—] kap. 10