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.
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á čárka | plovoucí čárka | |
|---|---|---|
| krok | všude stejný | roste s velikostí čísla |
| rozsah | úzký a známý předem | obrovský |
| sčítání | obyčejná celočíselná sčítačka | potřebuje zarovnat exponenty |
| násobení | vyjde 2× širší, musí se posunout | hardware to udělá |
| chování na kraji | obtočí se nebo se ořízne — na programátorovi | nekoneč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.
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.