Püsikomaarv

**Püsikomaarv** (ingl *fixed-point arithmetic*) on andmetöötluses reaalne andmetüüp numbrile, millel on komakoha pikkus fikseeritud pärast koma/punkti ja vahel ka enne. Püsikomaarvu esitust võib võrrelda keerulisema ujukomaarvu esitusega. Püsikomaarvud on kasulikud murdarvude esitamiseks, tavaliselt baasil 2 või baasil 10, kui täidesaatval protsessoril puudub ujukoma komponent või kui püsikoma tagab rakenduse parema jõudluse või täpsuse. Vanematel või odavatel sisseehitatud mikroprotsessoritel ja mikrokontrolleritel ei ole ujukoma komponenti.
## Kuju
Püsikomaarvu andmetüübi väärtus on sisuliselt täisarv, mille mastaapi muudetakse kaudse spetsiifilise teguriga, mis on määratud selle tüübi poolt. Näiteks võib väärtuse 1.23 esitada 1230 püsikomaarvu tüübina kui mastaabitegur on 1/1000 ja väärtuse 1,230,000 saab esitada 1230, kui mastaabitegur on 1000. Erinevalt ujukomaarvu andmetüübidest on mastaabitegur kõigi sama tüüpi väärtuste puhul sama ja ei muutu terve arvutuse vältel. Mastaabitegur on tavaliselt kümne astmed (inimeste mugavuseks) või kahe astmed (arvutusefektiivsuseks). Siiski võib mõnikord kasutada teisi mastaabitegureid – näiteks tundide ajalist väärtust võib esitada püsikomaarvu tüübina, mille mastaabitegur on 1/3600, et saada ühe sekundi täpsusega väärtus. Püsikomaarvu maksimaalne väärtus on suurim väärtus, mida on võimalik esitada läbi aluseks oleva täisarvu tüübi, mida on korrutatud mastaabiteguriga. Sama kehtib minimaalse väärtuse korral.

## Binaarne ''vs.'' kümnendsüsteem
Kaks kõige levinumat püsikomaarvu tüüpi on kümnendarv ja binaarne arv. Kümnendpüsikomaarvu tüüpidel on mastaabiteguriks kümnendastmed ja binaarsetel püsikomaarvu tüüpidel on mastaabiteguriks kahendastmed. Kõige sagedamini kasutatakse binaarseid püsikomaarvutüüpe, sest mastaabi muutmist saab teha kiirete bittide vahetustega. Binaarsed püsikomaarvud esitavad kahe astmeid, aga ei saa esitada kümnete astmeid. Kui on vaja kümnete astmeid, tuleb kasutada kümnendsüsteemi. Näiteks ühte kümnendikku ja ühte sajandikku saab esitada binaarses süsteemis ainult ligikaudselt, kuid kümnendsüsteemis täpselt. Neid esitusi võib kodeerida mitmel viisil, kaasa arvatud binaarseks kodeeritud kümnendsüsteemiga.

## Esitus

Sõna pikkuse ja komakoha esitamiseks kasutatakse mitmesuguseid märkeid binaarses püsikomaarvus. Järgnevas loendis tähistab f murdosa bitte, m tähistab suurusjärgu või täisarvu bitte, s tähistab märgibittide arvu ja b bittide koguarvu.

* Qf: „Q“ prefiks. Näiteks Q15 kujutab endast 15 murdarvuga numbrit. Selline märge on mitmetähenduslik, sest see ei täpsusta sõna pikkust, kuid tavaliselt eeldatakse, et sõna pikkus on kas 16 või 32 bitti, sõltuvalt kasutusel olevast sihtoperaatorist.
*Qm.f: „Q“ märke ühemõtteline vorm. Kuna kogu sõna on kahenitäiendi täisarv, on märgi bitt tuletatud. Näiteks Q1.30 tähistab numbrit, kus on üks täisarvu bitt ja 30 murdarvu bitti, mis on salvestatud 32-bitise kahenitäiendi täisarvuks.
* fxm.b: „fx“ prefiks sarnaneb ülaltooduga, kuid kasutab sõna pikkust teise elemendina punktiga eraldatud paaris. Näiteks fx1.16 tähistab 16-bitises sõnas arvu üks suurusjärgu biti ja 15 murdosa bittidega.
* s:m:f: Teised märked sisaldavad märgi bitti, näiteks sellist, mida kasutati PS2 GS kasutusjuhendis. Tavapärasest kasutamisest erineb see sellega, et kasutab eraldajana punkti asemel koolonit. Näiteks on sellises märgistuses 0:8:0 anonüümne 8-bitine täisarv.

## Täpsuskadu ja ülevool
Kuna püsikomaarvu toimingud võivad anda tulemusi, millel on rohkem bitte kui operande, võib informatsiooni kaotsi minna. Näiteks võib püsikomaarvu korrutamise tulemusel olla sama palju bitte kui kahe operandi bittide summas. Selleks, et tulemus mahutada samasugusesse bittide arvu kui oli operandidel, tuleb vastus kas ümardada või kärpida. Kui nii juhtub, on tähtis valida õiged bitid, mida alles hoida. Kui korrutada kaks sama formaadi püsikomaarvu, näiteks I täisarvu bitte ja Q murdosa bitte, siis vastuses võib olla kuni 2I täisarvu bitte ja 2Q murdosa bitte.

Lihtsuse jaoks kasutavad püsikomaarvu korrutamisprotseduurid sama tulemuse vormi, mis operandid. Nii hoitakse keskmisi bitte: I – kõige vähem olulisemaid täisarvu bitte ja Q – kõige olulisemate murdosa bitte. Kaotatud murdosa bitid esindavad täppiskadu, mis on tavaline murdosadega korrutamises. Kui mõned täisarvu bitid kaotatakse, on tulemus radikaalselt ebatäpne. Mõned mudelipõhised püsikomaarvu lisad võimaldavad määrata tulemusvormingu teistsuguseks algsest sisestatud vormingust. See võimaldab maksimeerida täpsust ja vältida ülevoolu.

Mõnedel tehetel, nagu jagamine, on tihtipeale sisseehitatud tulemuse piiramine, et iga positiivne ülevool tagaks suurima võimaliku numbri, mida on võimalik sellises formaadis esitada. Vastupidi, negatiivne ülevool tagab suurima negatiivse numbri, mida saab sellises formaadis esitada. Sellist sisseehitatud piirangut nimetatakse sageli *küllastuseks*.

Mõned protsessorid toetavad riistvaralist ülevoolukaitset, mis annab teada kui on ülevool tekkinud, aga selleks ajaks on tavaliselt juba liiga hilja, et päästa õige tulemus.

## Viited