Съдържание¶
Подготовка за агрегиране - ENS de Rennes, 2018-19¶
Относно този документ¶
Въпрос за програмиране¶
Въпросът за програмиране за този текст е даден на страница XXX:

Модерализация¶
Ние сме свободни да изберем подхода.
Текст¶
TODO: конвертирайте в LaTeX и използвайте модел, който много прилича на този на "реални текстове".
Този текст обяснява как работят позитите, като първо се детайлизира значението на техните битове, след това се обсъжда тяхната точност и адаптивна амплитуда.
Позициите са нов формат (2015) за представяне на реални числа на компютър, предлаган като алтернатива на стандартните числа с плаваща запетая (IEEE). По-пълна презентация е дадена на сайта posithub.org .
Предимството на позициите е способността им да придават по-голяма прецизност или адаптивна амплитуда, като използват същия брой битове като стандартен поплавък. Например, ако софтуерът може да превключва от 64-битови IEEE плаващи към 32-битови позиции, той може да съхранява два пъти повече числа в паметта едновременно! Може да изглежда ненужно, но подобен вид подобрение може да бъде от полза за изчисленията на микрокомпютри (напр. Безжични сензори, роботи), системната памет често е много ограничена, но също така и конвенционален компютър, който обработва голям брой данни (например машинно обучение на големи масиви от данни).
Напомняния на IEEE 754 плувки¶
Ще припомним, че стандартните плувки често се наричат float в OCaml, Python, C, както и в Java. В зависимост от архитектурата, плувките са 32- или 64-битови поплавъци и обикновено двойниците са 64- или 128-битови поплавъци, като и двете следват стандарта IEEE 754. В Python плувките всъщност използват двойни в C.
Ще припомним също, че стандартните плувки съдържат три специални стойности, NaN ("не число", не число), безкрайност или inf, което представлява $ + \ infty $ и neg_infinity или -inf, което представлява $ - \ infty $.
Аритметика на IEEE с поплавък¶
Правилата за изчисляване на специални стойности и изчисления, които генерират специални стойности са илюстрирани със следните примери:
Имайте предвид също, че при IEEE floats има две нули, една отрицателна и друга положителна:
Това не е случаят с цели числа, например:
И накрая, припомняме, че аритметиката на реалните числа не е точна, например:
Представяне чрез битови масиви¶
Въпреки че стойността на NaN и безкрайностите са уникални, те всъщност имат много възможни представяния, което често се критикува като загуба. Например 32-битовите IEEE плувки имат около 16 милиона начин за представяне на NaN! Вижте тази страница там (по-пълна на английски). Тази страница показва излишни примери за кодиране за 64-битови IEEE поплавъци и тази за 32-битови поплавъци.
Можете да използвате модула Int32, за да получите флоат от последователност от битове. Използвам "_", за да разделя знаковия бит, степенните битове и мантисата (или значимата).
Макс. И мин. Не можем да използваме "0b0_11111111_111111111111111111111111" за макс., Тъй като той представлява nan, и не можем да използваме "0b0_00000000_00000000000000000000000" за мин., Защото представлява нула.
Нулите имат експонента и богомолка, пълна с нула:
Безкрайните имат степен на пълнене с $ 1 $ и мантиса, пълна с $ 0 $.
Излишно кодиране! ¶
Няколко примера за Not a Number:
Такива са милиони, тъй като изложител, пълен с $ 1, винаги е нан! Това е огромна загуба на пространство! Точно има $ 2 ^ = $ 16777216 (16 милиона), тъй като можем да поставим каквато и да е стойност на битовете от $ 23 на мантисата и бита на знака !
Универсални числа и позиции¶
„Универсални числа“ (unum) бяха предложени от Джон Густафсън като друг начин за представяне на реално число с помощта на краен брой битове, за да бъде алтернатива на числата с плаваща запетая IEEE. Вижте неговата книга, озаглавена „Краят на грешката“. Позитите са хардуерна версия на unums., J. Gustafson, 2015 (вижте също този справочен документ и за по-кратко въведение вижте тази страница и този плакат).
Число с плаваща запетая (IEEE 754) има знаков бит, набор от битове, представляващи експонента, и набор от битове, наречени значими (наричани също „мантиса“). За даден размер дължината на различните части е фиксирана и стандартизирана. IEEE 752 номер, съхраняван в 64-битови едновременно, 1 знаков бит, 11 експонентни бита и 52 бита за значимите.
Позицията заема тази идея, но добавя четвърта категория битове, наречена режим. Позицията е набор от (подредени) битове, които са както следва (в този ред):
- знак бит,
- диета,
- изложител,
- фракция.
Значението на IEEE 754 число съответства на "дробната част", т.е. дроб. За разлика от класическите числа с плаваща запетая, двете части на показателя и частта от позицията нямат фиксирана дължина. Битовете за знака и скоростта имат предимство, а след това останалите битове, ако има такива, отиват в степента. И накрая, ако след експонента останат битове, те влизат във фракцията.