Кіріспе
Айналып тұрған нүктелер бірнеше битпен кодталады. Болжам бойынша, олар жалпы мақсаттағы сандық есептеулерге өте қолайлы емес. Олар арнайы мақсаттарда, көбінесе компьютерлік графикада қолданылады, онда қайталаулар аз және дәлдік эстетикалық әсер етеді. Машиналық оқыту bfloat16 сияқты ұқсас форматтарды да қолданады. Сонымен қатар, олар жиі кездеседі педагогикалық құрал ретінде компьютерлік курстарда, жылжымалы үтірлі арифметика мен IEEE 754 нөмірлерінің қасиеттері мен құрылымын көрсету үшін. 16 битті мини-флоттар жартылай дәлдікті сандар (бір және екі рет дәлдікке қарсы). Сонымен қатар 8 биттік немесе одан да аз шағын флоттар бар. Мини-флоттар IEEE 754 стандартының қағидаларына сәйкес жобалана алады. Бұл жағдайда олар нормадан төмен және нормальды сандар арасындағы шекараға қатысты (анық жазылған емес) ережелерге мойынсұнуға тиіс және шексіз және NaN үшін арнайы үлгілерге ие болуға тиіс. Нормалдастырылған сандар бейтарап экспонентімен сақталады. Стандарттың жаңа редакциясы, IEEE 754 2008, 16 биттік бинарлық мини-флоттар бар.
In computing, minifloats are floating point values represented with very few bits. Predictably, they are not well suited for general purpose numerical calculations. They are used for special purposes, most often in computer graphics, where iterations are small and precision has aesthetic effects. Machine learning also uses similar formats like bfloat16. Additionally, they are frequently encountered as a pedagogical tool in computer science courses to demonstrate the properties and structures of floating point arithmetic and IEEE 754 numbers. Minifloats with 16 bits are half precision numbers (opposed to single and double precision). There are also minifloats with 8 bits or even fewer. Minifloats can be designed following the principles of the IEEE 754 standard. In this case they must obey the (not explicitly written) rules for the frontier between subnormal and normal numbers and must have special patterns for infinity and NaN. Normalized numbers are stored with a biased exponent. The new revision of the standard, IEEE 754 2008, has 16 bit binary minifloats.
8-биттік float мысалы
+8 биттік мини-флотаның (1.4.3) мысал белгісі 0 0 0 0 0 0 0 0 0 0 0 Мұнда 1 байттағы (8 бит) 1 белгі биті, 4 көрсеткіші биті және 3 мәні биті бар (қысқаша айтқанда, 1.4.3 мини-флота) мини-флота көрсетілді. Экспоненттің ауытқуы 7 ретінде анықталады, бұл басқа IEEE 754 жүзулеріне сәйкес келетін мәндерді 1 шамасында ортаға салады, сондықтан (әдеттегі мәндер үшін) экспоненттің нақты көбейткіші x Барлық IEEE 754 қағидалары жарамды болуы керек. Басқа негіздегі сандар, мысалы, 101 = 5 деп белгіленеді. Биттік үлгілерде өз бөліктерін бейнелеу үшін бос орындар бар.
A minifloat in 1 byte (8 bit) with 1 sign bit, 4 exponent bits and 3 significand bits (in short, a 1.4.3 minifloat) is demonstrated here. The exponent bias is defined as 7 to center the values around 1 to match other IEEE 754 floats so (for most values) the actual multiplier for exponent x is All IEEE 754 principles should be valid. Numbers in a different base are marked as , for example, 101 = 5. The bit patterns have spaces to visualize their parts.
Нормалды саннан төмен
Мағыналық мән "0" арқылы кеңейтіледі. және экспоненттің мәні ең аз нормаланған сан сияқты 1 жоғары болып есептеледі: 0 0000 001 = 0,0012 × 21 7 = 0,125 × 2 6 = 0,001953125 (ең аз нормадан төмен сан) 0 0000 111 = 0,1112 × 21 7 = 0,875 × 2 6 = 0,013671875 (ең үлкен нормадан төмен сан)
0 0000 001 = 0.0012 × 21 7 = 0.125 × 2 6 = 0.001953125 (least subnormal number)
0 0000 111 = 0.1112 × 21 7 = 0.875 × 2 6 = 0.013671875 (greatest subnormal number)
Нормалдастырылған сандар
Мағыналылық "1.
0 0001 000 = 1.0002 × 21 7 = 1 × 2 6 = 0.015625 (least normalized number)
0 0001 001 = 1.0012 × 21 7 = 1.125 × 2 6 = 0.017578125
0 0111 000 = 1.0002 × 27 7 = 1 × 20 = 1
0 0111 001 = 1.0012 × 27 7 = 1.125 × 20 = 1.125 (least value above 1)
0 1110 000 = 1.0002 × 214 7 = 1.000 × 27 = 128
0 1110 001 = 1.0012 × 214 7 = 1.125 × 27 = 144
0 1110 110 = 1.1102 × 214 7 = 1.750 × 27 = 224
0 1110 111 = 1.1112 × 214 7 = 1.875 × 27 = 240 (greatest normalized number)
Құндылықтар кестесі
Бұл 8 битті float-тың барлық мүмкін мәндерінің диаграммасы. 1000 001 010 011 100 111 0 0000 0 0.001953125 0.00390625 0.005859375 0.0078125 0.009765625 0.01171875 0.013671875 1 1 00001 0.015625 0.015625 0.015625 0.015675 0.015675 0.015675 0.015675 0.015675 0.015675 0.0156 0.015675 0.0156 0.0156 0.0156 0.0156 0.0156 0.0756 0.0756 0.0758 0.0756 0.0756 0.0758 0.0756 0.0758 0.0756 0.0758 0.0758 0.0758 0.0758 0.0758 0.0758 0.0758 0.0758 0.0758 0.0758 0.0758 0.0758 0.0758 0.0758 0.0758 0.0758 0.0758 0.0758 0.000 0.0758 0.0758 0.0 0.0758 0.0 0.0758 0.0 0.000000 0.0758 0.0 0.0000000 0.0000000000000 0.0000000000000000000 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 Жоғарыда көрсетілгендей кестелерді кез келген SEMB мәндерінің комбинациясы үшін Python немесе GDScript скрипті арқылы жасауға болады.
There are only 242 different non NaN values (if +0 and −0 are regarded as different), because 14 of the bit patterns represent NaNs. Tables like the above can be generated for any combination of SEMB values using a script in Python or in GDScript.
Баламалық ауытқулар
Бұл кіші өлшемдерде басқа да ауытқулар қызықты болуы мүмкін, мысалы, 2 ауытқу 0 16 сандарын 0 16 бүтін сандарымен бірдей биттік бейнелеуге әкеледі, бұл бүтін саннан басқа мәндер көрсетілмейді.
0 0000 001 = 0.0012 × 21 ( 2) = 0.125 × 23 = 1 (subnormal number)
0 0000 111 = 0.1112 × 21 ( 2) = 0.875 × 23 = 7 (subnormal number)
0 0001 000 = 1.0002 × 21 ( 2) = 1.000 × 23 = 8 (normalized number)
0 0001 111 = 1.1112 × 21 ( 2) = 1.875 × 23 = 15 (normalized number)
0 0010 000 = 1.0002 × 22 ( 2) = 1.000 × 24 = 16 (normalized number)
Қосу
Графикте 6 битті кіші (1.3.2.3) мини-флоттар қосылуы көрсетілген. Бұл жылжымалы нүктелік жүйе IEEE 754 ережесін дәл орындайды. NaN операндар ретінде әрқашан NaN нәтижелерін береді. Inf - Inf және (−Inf) + Inf нәтижесі NaN-да (жасыл аймақ). Inf өзгерісісіз шекті мәндермен көбейтілуі және азайтылуы мүмкін. Соңғы операндармен қосындылар шексіз нәтиже бере алады (яғни 14.0 + 3.0 = +Inf нәтижесінде - циан ауданы, −Inf - қызғылт түсті ауданы). Шекті операндар диапазоны x + y = c қисықпен толтырылады, мұнда c әрқашан бейнеленетін жүзу мәндерінің бірі (тиісінше оң және теріс нәтижелер үшін көк және қызыл).
Басқа өлшемдер
Radeon R300 және R420 GPU-да "fp24" жылжымалы нүктелік форматы қолданылды, онда 7 биттік экспонент және 16 биттік (+1 имплицитті) мантисса бар. Direct3D 9.0-дегі "Толық дәлдік" - 24 биттік жылжымалы нүктелік формат. Microsoft-тың D3D9 (Shader Model 2.0) графикалық API бастапқыда FP24 (ATI-дің R300 чипіне сәйкес) және FP32 (Nvidia-ның NV30 чипіне сәйкес) "Толық дәлдік" ретінде, сондай-ақ FP16 графикалық аппараттық жасақтамамен орындалатын vertex және пиксельдік шейдерлік есептеулер үшін "Жыны дәлдік" ретінде қолдады. Khronos Vulkan-мен пайдалану үшін 10 бит және 11 бит флоат форматтарын анықтайды. Екі форматта да белгі биті жоқ және 5 биттік экспоненті бар. 10 биттік форматта 5 биттік мантисса, ал 11 биттік форматта 6 биттік мантисса бар. IEEE SA жұмыс тобы P3109 қазіргі уақытта машиналық оқыту үшін оңтайландырылған 8 битті мини-флоттар стандарты бойынша жұмыс істейді. Қазіргі жобада бір форматы емес, "бинарлық8pP" деп аталатын 7 түрлі форматтың отбасы анықталды, мұнда "P" - 1-ден 7-ге дейінгі сан. Бұл жүзулер компактты және тиімді болу үшін жасалған, бірақ басқа IEEE жүзулері сияқты семантикаға сәйкес келмейді және теріс нөл және бірнеше NaN мәндері сияқты ерекшеліктер жоқ. Шексіздік экспоненті мен мәнін бірдей бірліктерге ие деп анықталады, басқа IEEE-дің орнына, экспоненті - бірлік, мән - нөл.
Тігілген құрылғыларда
Мини-флоталар сондай-ақ, әдетте, кіріктірілген құрылғыларда, әсіресе, микробасқарушыларда қолданылады, онда жылжымалы нүктелерді бағдарламалық жасақтамада эмуляциялау қажет болады. Есептеуді жылдамдату үшін мантисса әдетте биттердің жартысын алады, сондықтан регистр шекарасы бөліктерді ауыстырмай автоматты түрде қарастырады.