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  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 , 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.

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  täisarvu bitte ja  murdosa bitte, siis vastuses võib olla kuni  täisarvu bitte ja  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.