Съдържание¶

Подготовка за агрегиране - 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 число съответства на "дробната част", т.е. дроб. За разлика от класическите числа с плаваща запетая, двете части на показателя и частта от позицията нямат фиксирана дължина. Битовете за знака и скоростта имат предимство, а след това останалите битове, ако има такива, отиват в степента. И накрая, ако след експонента останат битове, те влизат във фракцията.