Wat is wat? · bei.pm
In hierdie afdeling is daar artikels oor lêerformate en omgekeerde ingenieurswese.
Maar nou is dit so:
Daar is baie programmeertale daar buite en baie mense wat sekere dinge onder heeltemal verskillende name ken - of glad nie weet van die bestaan van fundamentele dinge nie, omdat hul programmeertaal dit van hulle af abstraheer.
tl;dr:
My notasie is grof georiënteer op C99 <stdint.h>
. Enigiemand wat met hierdie notasie kan werk, sal beslis met my notasie kan oorwegkom.
Geheelgetal
Integer is eenvoudig gesê heelgetalle, dit wil sê getalle sonder 'n desimale deel.
Daarby is Integer in datavorme gewoonlik binne 'n vaste getalspesifisering, byna 'n resolusie, gedefinieer. Ek gee dit aan in biedes - om die rede dat 'n "byte" en daarop gebou tipe (Word, Qword, ...) meestal platformafhanklik is.
Verder onderskei ons ook tussen natuurlike getalle (ℕ, dit wil sê, sonder teken - Unsigned) en heelgetalle (ℤ, dit wil sê, met teken - Signed).
Diese inligting is oor 'n teken in die benoeming (u
of s
) sigbaar.
Daarby is dit moontlik dat teken-gehegte heelgetalle óf as Eenkomplement voorgestel word of as Tweeerkomplement.
Soos dit nie anders vermeld is nie, word die Tweeerkomplement gebruik, omdat dit in moderne rekenkunde die voorkeur voorstelling vorm.
Ongetekende getalle word deur my in my dokumentasies as uint
aangedui, met 'n daaropvolgende aanduiding van die akkuraatheid in Bits.
Teken-gehegte getalle word deur my in my dokumentasies as sint
aangedui, ook met 'n daaropvolgende aanduiding van die akkuraatheid in Bits.
Ek laat die gebruik van die datatipe "char" vir karakters vaar, omdat tekenstringe gewoonlik net Integer-waarde-stringe met 'n spesiale interpretasie voorstel.
Diese word dus as uint(8)[] voorgestel.
Voorbeelde:
Notasie | C99 stdint.h -Ekwiwalent |
Beskrywing | Getalruimte |
---|---|---|---|
uint(16) | uint16_t | Ongetekende Heelgetal, 16 Bit Lengte | 0 - 65.535 |
sint(8) | int8_t | Getekende Heelgetal, 8 Bit Lengte, Twee-komplement | -126 - 127 |
uint(24) | uint32_t:24 | Ongetekende Heelgetal, 24 Bit Lengte | 0 - 16.777.216 |
Vaste komma-waardes
Vaste-komma-waardes is getalwaardes uit die spektrum van Rasionale Getalle (Q), wat beteken dat hulle oor 'n komma sowel as nagmaal plekke beskik.
By vaste-komma-waardes is - daarom ook die naam - die posisie van die komma deur die datatype vasgestel.
Dit lei ook tot 'n vaste getalreeks vir getalle van hierdie datatype; wiskundig gesproke is die getalruimte eindig.
In die werklike lewe word hierdie datatype hoofsaaklik gebruik op platforms sonder voldoende vinnige drijvende-komma-hardware-eenhede, omdat die berekening van vaste-komma-waardes deur heelgetal-eenhede kan plaasvind.
Die datatype word ook byvoorbeeld deur databasisbestuurstelsels gebruik wanneer vaste vereistes nagekom moet word.
Dink byvoorbeeld aan stelsels vir die permanente berging van finansiële data; die meeste geldeenhede beperk hulle tot 2 plekke na die komma.
(However, it's not wise to use fixed-point values for this; it's smarter to store the smallest currency unit directly as an integer and leave the rest of the representation level to it.)
Analogies met die heelgetal-gegewens, gee ek by vaste-komma-waardes die resolusie van die getal voor en na die komma aan:
ufixed(9,7)
dui 'n datatype aan wat sonder teken 9 Bit vir die waarde voor die komma, sowel as 7 Bit vir die waarde na die komma reserveer; in totaal dus 16 Bit breed is en so byvoorbeeld as 'n vektor van twee onafhanklike heelgetalle 'n reeks van (0,0) tot (511,127) kan dek.
Diese interpretasie sou egter in sy desimale voorstelling 28 getalle onbenut laat, aangesien jy waarskynlik eerder op maksimum (511,99) in die praktyk sou beperk.
In plaas van 'n direkte interpretasie van die vaste-komma-waarde as 'n vektor van 2 geskeide heelgetalle - wat feitlik altyd 'n onbenutte data-oppervlak tydens die omskakeling na desimale getalle en 'n handmatige oordrag beteken - kan die nagmaalgebied eerder as breuk van hul totale resolusie geïnterpreteer word.
By die voorbeeld van die pasgenoemde ufixed(9,7)
ontstaan dus 'n breuk oor 'n noemer van 27 - die getalreeks gaan dan van 0,00 tot 511 + 126⁄127
Ter omskakeling na 'n desimale voorstelling moet die nagmaal plek dus deur 128 gedeel word.
Mit hierdie weergawe is dit makliker om rekenkundige operasies uit te voer, aangesien die oordrag outomaties gebeur, waardeur hierdie weergawe gewoonlik voorkeur geniet.
Diese weergawe het egter die nadeel dat die nagmaal plekke in die desimale voorstelling nie meer oor 'n gewaarborgde resolusie beskik nie, wat beteken dat 'n enkele desimale plek nie meer die teenwaarde 0.01
, maar 0.007874
het, wat tot ooreenstemmende afrondingsfoute sal lei.
Watter interpretasiewyse gebruik word, sal ooreenkomstig by die gebruikspunt gedokumenteer word.
Vlewende of drijvende-komma waardes
Drijvende kommagetalle is wiskundig meer komplekse uitdrukkings, waar 'n heelgetal met 'n vaste resolusie oor 'n wiskundige term so uitgedruk word, dat die desimale deel effektief gevorm word deur verskuiwing - en dus direk op die wetenskaplike notasie georiënteer is.
Die mees algemene manier om dit te implementeer, is met
IEEE 754 gestandaardiseer en is sindsdien internasionaal erken.
'n Drijvende kommagetal bestaan gewoonlik uit die volgende komponente:
Tekens (0 of 1 ) |
Ekspoonent | Mantisse |
Terwyl die teken as 'n binêre Ja/Nee-inligting eenvoudig afgeleides kan word, vorm die werklike getal oor die vergelyking
Mantisse * 2Ekspoonent
Boonop is daar 'n aantal konstante waardes wat spesiale gevalle van rationele getalle dek - insluitend ±∞
en NaN
("geen geldige getal").
Drijvende kommagetalle is veral nuttig wanneer die akkuraatheid nie so belangrik is nie, aangesien dit by hierdie tipe waardes noodwendig tot afrondingsfoute en gevolglik akkuraatheidsverlies lei. Tipies word drijvende kommagetalle dus byvoorbeeld gebruik om koördinate te definieer, soos vertex-vektore in 3D-modelle of Bézier-/Spline-kurwes vir optiese verteenwoordigingsdoeleindes.
In die dataformate word drijvende kommagetalle gespesifiseer as float(Mantisse, Ekspoonent)
.
As 'n formaat wat van IEEE 754 verskil, gebruik word, sal dit dienooreenkomstig aangedui word.