Kas ir kas? · bei.pm

Šis teksts tika automatizēti tulkots, izmantojot OpenAI GPT-4o Mini.

Šajā rubrikā ir raksti par failu formātiem un reverso inženieriju.

Tomēr ir tā:
Iekšā ir daudz programmēšanas valodu un daudz cilvēku, kuri dažas lietas pazīst ar pilnīgi citiem nosaukumiem - vai pat nav ne jausmas par fundamentālām lietām, jo viņu programmēšanas valoda to no viņiem attālinājusi.

tl;dr:
Manas notācijas pamatā ir C99 <stdint.h>. Tie, kas saprot šo notāciju, noteikti spēs saprast arī manu notāciju.

Vesels skaitlis

Veseli skaitļi ir vienkārši sakot, veseli skaitļi, t.i., skaitļi bez decimāldaļas.

Veselu skaitļu datu formāti parasti ir definēti noteiktā skaitļu diapazonā, būtībā vienā izšķirtspējā. Šo es norādu bitos - tāpēc, ka "baits" un uz tā balstītie tipi (vārds, kvadrāts, ...) parasti ir atkarīgi no platformas.

Turklāt, runājot par veseliem skaitļu tipiem, atšķirība tiek veikta arī starp dabiskajiem skaitļiem (ℕ, t.i., bez zīmes - Unsigned) un veseliem skaitļiem (ℤ, t.i., ar zīmi - Signed).
Šī informācija ir redzama ar zīmi identifikatorā (u vai s).

Turklāt, ir iespējams, ka ar zīmi veseli skaitļi tiek attēloti vai nu kā vieninieka komplements, vai kā divnieka komplements.
Līdz brīdim, kad nav norādīts citādi, tiek izmantots divnieka komplements, jo tas ir mūsdienu informātikā priekšroka attēlojums.

Bez zīmes skaitļi manās dokumentācijās tiek norādīti kā uint, norādot arī precizitāti bitos.
Ar zīmi skaitļi manās dokumentācijās tiek norādīti kā sint, tāpat norādot precizitāti bitos.

Es nevēlos izmantot datu tipu "char" rakstzīmēm, jo rakstzīmju virknes parasti ir tikai veselu skaitļu virknes ar īpašu interpretāciju.
Tāpēc tās tiek attēlotas kā uint(8)[].

Piemēri:

Notācija C99 stdint.h-ekvivalents Apraksts Skaitļu diapazons
uint(16) uint16_t Bez zīmes vesels skaitlis, 16 bitu garums 0 - 65.535
sint(8) int8_t Ar zīmi vesels skaitlis, 8 bitu garums, divu komplementa formāts -126 - 127
uint(24) uint32_t:24 Bez zīmes vesels skaitlis, 24 bitu garums 0 - 16.777.216

Festkomma vērtības

Fiksēta punkta vērtības ir skaitļu vērtības no reālo skaitļu (Q) spektra, tādējādi tām ir punkts un pēc punkta skaitļi.

Fiksēta punkta vērtībām - kā jau nosaukums norāda - punkta pozīcija ir stingri noteikta pēc datu tipa.
Tādējādi rodas arī noteikts skaitļu diapazons šī datu tipa skaitļiem; matemātiski izsakot, skaitļu telpa ir beigta.

Reālajā dzīvē šis datu tips galvenokārt tiek izmantots platformās, kurām nav pietiekami ātra peldošā punkta aparatūras, jo fiksēta punkta vērtību aprēķināšana var notikt caur veselo skaitļu vienībām.

Tāpat šo datu tipu, piemēram, izmanto datu bāzes pārvaldības sistēmās, kad ir jānodrošina stingras prasības.
Jādomā, piemēram, par sistēmām, kas nodrošina ilgtermiņa finanšu datu glabāšanu; lielākā daļa valūtu ierobežo sevi līdz 2 skaitļiem aiz punkta. (Tomēr nav prātīgi izmantot fiksēta punkta vērtības; gudrāk ir tieši saglabāt mazāko valūtas vienību kā veselu skaitli un atstāt pārējo attēlošanas līmeni)

Analogi veselajiem skaitļiem es fiksēta punkta vērtībām norādu skaitļa izšķirtspēju pirms un pēc punkta:
ufixed(9,7) apzīmē datu tipu, kas bez zīmes rezervē 9 bitus vērtībai pirms punkta un 7 bitus vērtībai pēc punkta; kopā tādējādi ir 16 bitu plats un tādēļ, piemēram, kā divu neatkarīgu veselo skaitļu vektors var aptvert diapazonu no (0,0) līdz (511,127).
Taču šī interpretācija savā dekadiskajā attēlojumā bezjēdzīgi ziedotu 28 skaitļus, jo, iespējams, praksē ierobežotos līdz maksimāli (511,99).

Vietā, lai interpretētu fiksēta punkta vērtību kā vektoru no 2 atsevišķiem veseliem skaitļiem - kas praktiski vienmēr nozīmē nevajadzīgu datu jomu, kad to pārveido dekadiskos skaitļos, un manuālu pāreju - var arī interpretēt pēc punkta esošo jomu kā daļu no tās kopējās izšķirtspējas.
Piemēram, iepriekšminētajam ufixed(9,7) tādējādi rodas daļa ar saucēju 27 - skaitļu diapazons tad ir no 0,00 līdz 511 + 126127 Lai to pārveidotu dekadiskajā attēlojumā, pēc punkta esošais skaitlis jādalās ar 128.
Izmantojot šo variantu, ir vieglāk veikt aprēķinu operācijas, jo pāreja notiek automātiski, tādējādi šis variants parasti tiek vēlēts.
Taču šim variantam ir trūkums, ka pēc punkta esošie skaitļi dekadiskajā attēlojumā vairs nav garantēti ar izšķirtspēju, tādējādi viens dekadiskais skaitlis vairs nav ekvivalents 0.01, bet gan 0.007874, kas radīs attiecīgas noapaļošanas kļūdas.

Kura interpretācijas metode tiek izmantota, tiek attiecīgi dokumentēta lietošanas vietā.

Reālie skaitļi jeb peldošie skaitļi

Peldošā komata vērtības ir matemātiski sarežģītāki izteikumi, kuros vesels skaitlis ar fiksētu izšķirtspēju tiek izteikts caur matemātisko terminu tā, ka efektīvi decimālskaitļa daļa tiek veidota, pārvietojot to - un tieši tādējādi orientējoties uz zinātnisko notāciju.
Visbiežākā metode, kā to īstenot, tika standartizēta ar IEEE 754 un kopš tā laika ir starptautiski atzīta.

Peldošā komata vērtība parasti sastāv no šādām sastāvdaļām:

Zīme (0 vai 1) Eksponents Mantisa

Kamēr zīmi kā bināro Jā/Nē informāciju var viegli noteikt, pati skaitļa veidošana notiek, izmantojot vienādojumu
Mantisa * 2Eksponents

Turklāt pastāv arī virkne konstantiem vērtībām, kas aptver īpašus gadījumus racionāliem skaitļiem - tostarp ±∞ un NaN ("nav derīgs skaitlis").

Peldošā komata vērtības ir īpaši noderīgas, ja precizitāte nav tik svarīga, jo šāda veida vērtībās neizbēgami rodas noapaļošanas kļūdas un līdz ar to precizitātes zudumi. Tipiski peldošā komata vērtības tiek izmantotas, piemēram, koordinātu definēšanai, piemēram, virsotņu vektoriem 3D modeļos vai Bézier/spline līknes optiskās reprezentācijas nolūkiem.

Datu formātos peldošā komata vērtības tiek specifizētas kā float(Mantisa, Eksponents).
Ja tiek izmantots formāts, kas atšķiras no IEEE 754, tas tiek attiecīgi norādīts.