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 formula_1 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 formula_2, 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.
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 formula_13 täisarvu bitte ja formula_4 murdosa bitte, siis vastuses võib olla kuni formula_15 täisarvu bitte ja formula_16 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.