Mis on mis? · bei.pm
Selles rubriigis on artiklid failivormingutest ja tagasitehnoloogilisest inseneriast.
Aga asi on selline:
Seal on palju programmeerimiskeeli ja palju inimesi, kes tunnevad teatud asju täiesti erinevate nimede all - või pole üldse teadlikud kõige elementaarsemate asjade olemasolust, kuna nende programmeerimiskeel on need neist eemale abstraktseerinud.
tl;dr:
Minu süntaks põhineb peamiselt C99 <stdint.h>
-l. Need, kes mõistavad seda süntaksit, saavad kindlasti minu süntaksiga hakkama.
Täisarv
Integer on lihtsalt öeldes täisarvud, st numbrid, millel ei ole kümnendkohta.
Integerid on andmevormingutes tavaliselt määratletud kindlas numbrivahemikus, peaaegu nagu resolutsioon. Seda väljendatakse bittides - kuna "bait" ja sellel põhinevad tüübid (Word, Qword, ...) on tavaliselt platvormist sõltuvad.
Lisaks eristatakse Integer-tüüpide vahel looduslikud arvud (ℕ, st, ilma märgita - Unsigned) ja täisarvud (ℤ, st, märgiga - Signed).
See teave on nähtav määramisel oleva märgi kaudu (u
või s
).
On võimalik, et märgiga täisarve esitatakse kas ühekomplektina või kahekomplektina.
Kuni ei ole teisiti märgitud, kasutatakse kahekomplekti, kuna see on kaasaegses infotehnoloogias eelistatud esitlus.
Märgita numbreid esitan oma dokumentatsioonides kui uint
, millele järgneb täpsuse määramine bitides.
Märgiga numbreid esitan oma dokumentatsioonides kui sint
, samuti täpsuse määramine bitides.
Ma loobun andmetüübi "char" kasutamisest sümbolite jaoks, kuna sümbolikettad esindavad tavaliselt ainult Integeri väärtuste ketti koos spetsiaalse tõlgendusega.
Need esitatakse seega kui uint(8)[].
Näited:
Notatsioon | C99 stdint.h -võrdväärsus |
Kirjeldus | Numbrivahemik |
---|---|---|---|
uint(16) | uint16_t | Alumisega täisarv, 16-bitine pikkus | 0 - 65.535 |
sint(8) | int8_t | Allkiri täisarv, 8-bitine pikkus, kahekomplement | -126 - 127 |
uint(24) | uint32_t:24 | Alumisega täisarv, 24-bitine pikkus | 0 - 16.777.216 |
Festkomma väärtused
Fikseeritud komaga väärtused on arvuväärtused ratsionaalsete numbrite (Q) spektris, mis tähendab, et neil on komma ja komma järel kohad.
Fikseeritud komaga väärtuste puhul on - seetõttu ka nimi - koma asukoht andmetüübi järgi kindlaks määratud.
Seetõttu on selle andmetüübi numbrite jaoks ka kindel numbrivahemik; matemaatiliselt väljendatuna on numbriruumi lõplik.
Tegelikult kasutatakse seda andmetüüpi peamiselt platvormidel, kus puudub piisavalt kiire ujukoma riistvara, kuna fikseeritud komaga väärtuste arvutamine saab toimuda täisarvude abil.
Seda andmetüüpi kasutatakse näiteks andmebaasi haldamise süsteemides, kui tuleb täita kindlaid nõudmisi.
Siin võiks mõelda süsteemidele, mis on mõeldud rahanduse andmete püsivaks salvestamiseks; enamik valuutasid piirdub 2 kohaga koma järel.
(Kuid ei ole mõistlik kasutada selleks fikseeritud komaga väärtusi; targem on salvestada otse kõige väiksem rahaühik täisarvuna ja jätta ülejäänud esituse taseme jaoks)
Sarnaselt täisarvude määratlusele määran fikseeritud komaga väärtuste puhul numbri eraldusvõime enne ja pärast koma:
ufixed(9,7)
tähistab andmetüüpi, mis eraldab 9 bitti koma ette ja 7 bitti koma järel; kokku on see 16 bitti lai ja katab seega näiteks kahe üksteisest sõltumatu täisarvu vektorina vahemiku (0,0) kuni (511,127).
Kuid see tõlgendus jätaks oma kümnendsüsteemis 28 numbrit kasutamata, kuna tõenäoliselt piirduks praktikas pigem maksimaalselt (511,99).
Selle asemel, et tõlgendada fikseeritud komaga väärtust otseselt kahe eraldi täisarvuna vektorina - mis peaaegu alati tähendab kasutamata andmeosa kümnendsüsteemi konverteerimisel ja käsitsi ülekandmist - saab koma järel olevat osa tõlgendada ka kui murda kogu eraldusvõime osas.
Nii et antud näite puhul ufixed(9,7)
selgub murd, mille nimetaja on 27 - numbrivahemik ulatub siis vahemikku 0,00 kuni 511 + 126⁄127
Dezimaalvahemikuks oleks koma järgne number seega jagatav 128-ga.
Selle variandi abil on lihtsam teostada arvutuste operatsioone, kuna ülekandmine toimub automaatselt, mistõttu seda varianti eelistatakse tavaliselt.
Kuid sellel variandil on puudus, et koma järgne number ei pruugi enam oma kümnendsüsteemis omada garanteeritud eraldusvõimet, seega ei tähenda üksik kümnendkoht enam väärtust 0.01
, vaid 0.007874
, mis põhjustab vastavaid ümardamisvigu.
Kui tõlgendusviisi kasutatakse, dokumenteeritakse vastavalt kasutuskoha juures.
Ujuv- ehk liugkomma väärtused
Ujuvad komad on matemaatiliselt keerukamad väljendid, kus täisarv fikseeritud lahutusega väljendatakse matemaatilise termini kaudu nii, et komaosa moodustatakse nihkega - ja seega on see vahetult seotud teadusliku notatsiooniga.
Tavalisim viis selle rakendamiseks standardiseeriti
IEEE 754 ja on sellest ajast alates rahvusvaheliselt tunnustatud.
Ühe ujuva koma väärtus koosneb tavaliselt järgmistest komponentidest:
Signaal (0 või 1 ) |
Eksponent | Mantissa |
Kui signaal on binaarne jah/ei teave, siis moodustatakse tegelik number järgmist võrrandit kasutades
Mantissa * 2Eksponent
Lisaks on olemas rida konstantseid väärtusi, mis katab erilisi juhtumeid ratsionaalsetest arvudest - sealhulgas ±∞
ja NaN
("kehtetu number").
Ujuvad komad on eriti kasulikud, kui täpsus ei ole nii oluline, kuna selle tüüpi väärtuste puhul tekib paratamatult ümardamisvea ja seega täpsuse kaotus. Tüüpiliselt kasutatakse ujuvaid komasid näiteks koordinaatide määratlemiseks, nagu vertex-vektorid 3D mudelites või Bézieri-/Spline-kõverad optiliste esitlemise eesmärkide jaoks.
Andmeformaatides määratletakse ujuvad komad kui float(Mantissa, Eksponent)
.
Kui kasutatakse IEEE 754-st erinevat formaati, siis märgitakse see vastavalt.