Какво е какво? · bei.pm

Текстът е автоматично преведен чрез OpenAI GPT-4o Mini.

В тази рубрика има статии за файлови формати и реверсивно инженерство.

Но е така:
Навън има много програмни езици и много хора, които познават някои неща под съвсем различни имена - или нямат никаква представа за съществуването на основни понятия, защото техният програмен език ги е абстрахирал от тях.

съкращение:
Моята нотация е грубо ориентирана по C99 <stdint.h>. Който може да работи с тази нотация, със сигурност ще се справи и с моята.

Цяло число

Целите числа са просто казано цели числа, тоест числа без десетична част.

При това целите числа в данни формати обикновено са определени в рамките на фиксиран числов спектър, почти като резолюция. Това го посочвам в битове - поради факта, че "байт" и типовете, основани на него (думи, двойни думи и др.) обикновено зависят от платформата.

Освен това, при типовете цели числа се различават естествени числа (ℕ, т.е. без знак - Беззнакови) и цели числа (ℤ, т.е. със знак - Със знак).
Tази информация е видима чрез знак в идентификатора (u или s).

Възможно е числата със знак да бъдат представени или като комплемент на единиците, или като комплемент на двойките.
Докато не е указано друго, се използва комплемент на двойките, тъй като той представлява предпочитаното представяне в съвременната информатика.

Беззнаковите числа се посочват от мен в моите документации като uint, следвано от указание за точността в битове.
Числата със знак се посочват от мен в моите документации като sint, също с указание за точността в битове.

Отказвам се от използването на типа данни "char" за символи, тъй като низовете обикновено представляват само вериги от цели числа с специална интерпретация.
Те следователно се представят като uint(8)[];

Примери:

Нотация C99 stdint.h-еквивалент Описание Обхват на числата
uint(16) uint16_t Беззнаков цяло число, 16 бита дължина 0 - 65.535
sint(8) int8_t Знаково цяло число, 8 бита дължина, двоично допълнение -126 - 127
uint(24) uint32_t:24 Беззнаков цяло число, 24 бита дължина 0 - 16.777.216

Стойности с фиксирана запетая

Фиксирани стойности са числови стойности от спектъра на Рационалните числа (Q), които следователно имат запетая и десетични знаци.

При фиксираните стойности, и затова името, позицията на запетаята е предварително зададена от типа данни.
Това също така определя фиксиран диапазон от числа за този тип данни; математически изразено, числовото пространство е крайно.

В реалността този тип данни се използва основно на платформи без достатъчно бързи хардуерни единици за плаваща запетая, тъй като изчислението на фиксирани стойности може да се извършва от целочислени единици.

Този тип данни също се използва, например, от системи за управление на бази данни, когато трябва да бъдат изпълнени фиксирани изисквания.
Може да се помисли за системи за постоянно съхранение на финансови данни; повечето валути имат ограничения до 2 знака след запетаята. (Но не е разумно да се използват фиксирани стойности за това; по-умно е вместо това да се запази най-малката валутна единица като цяло число и остатъкът да се остави за представителното ниво)

Подобно на целочислените стойности, при фиксираните стойности посочвам резолюцията на числото преди и след запетаята:
ufixed(9,7) обозначава тип данни, който заема 9 бита за стойността преди запетаята, и 7 бита за стойността след запетаята; общо тоест е широчина от 16 бита и може да обхване диапазон от (0,0) до (511,127) като вектор от две независими цели числа.
Тази интерпретация обаче би загубила 28 числа в десетичното си представяне, тъй като вероятно в практиката бихме се ограничили до максимум (511,99).

Вместо директна интерпретация на фиксираната стойност като вектор от 2 отделни цели числа - което почти винаги означава неупотребявано пространство за данни при преобразуването в десетични числа и ръчно пренасяне - вместо това десетичната част може да се интерпретира като дял от цялата й резолюция.
На примера с току-що споменатия ufixed(9,7), се получава дял с знаменател 27 - числовият диапазон тогава е от 0,00 до 511 + 126127 За преобразуване в десетично представяне, следователно, десетичната стойност трябва да се раздели на 128.
С тази версия изчислителните операции са по-лесни, тъй като пренасянето става автоматично, поради което тази версия обикновено се предпочита.
Тази версия обаче има недостатък, че десетичните стойности в десетичното представяне вече нямат гарантирана резолюция, тоест отделното десетично число вече не представлява стойността 0.01, а 0.007874, което ще доведе до съответни закръгления.

Използваната интерпретация се документира съответно на мястото на употреба.

Числа с плаваща запетая

Числа с плаваща запетая са математически по-сложни изрази, при които цяло число с фиксирано разрешение се изразява чрез математически термин така, че ефективно частта след запетаята да се образува чрез изместване - и по този начин се ориентира пряко към научната нотация.
Най-разпространеният начин за реализиране на това е стандартизиран с IEEE 754 и оттогава е международно признат.

Обикновено едно число с плаваща запетая се състои от следните компоненти:

Знак (0 или 1) Експонента Мантисса

Докато знакът може лесно да бъде извлечен като двоична информация Да/Не, самото число се формира чрез уравнението
Мантисса * 2Експонента

Освен това има редица константни стойности, които обхващат специални случаи на рационални числа - включително ±∞ и NaN ("невалидно число").

Числата с плаваща запетая са особено полезни, когато точността не е толкова важна, тъй като при този вид стойности неизбежно възникват грешки при закръгляне и по този начин загуба на точност. Типично числа с плаваща запетая се използват, например, за определяне на координати, като върхови вектори в 3D модели или Bézier-/Spline-криви за оптични представителни цели.

В данните формати числа с плаваща запетая се специфицират като float(Мантисса, Експонента).
Ако се използва формат, различен от IEEE 754, това се посочва съответно.