Швидкий обернений квадратний корінь (іноді згадуваний як Fast InvSqrt() або за шістнадцятковою сталою 0x5f3759df) — це метод обчислення , оберненого квадратного кореня для 32-бітного числа у форматі чисел з рухомою комою IEEE 754. Алгоритм ймовірно розробили у Silicon Graphics на початку 1990-х, і реалізація з'явилась 1999 року в сирцевому коді Quake III Arena, але метод не з'являвся на публічних форумах як-от Usenet до 2002 чи 2003. (Існує обговорення на китайському форумі розробників CSDN у 2000.) На той час, основна перевага алгоритму полягала у використанні замість обчислювально дорогих операцій над числами з рухомою комою операцій над цілими числами. Обернений квадратний корінь використовують для обчислення кутів падіння і відбивання для освітлення і шейдинга в комп'ютерній графіці.
Алгоритм приймає 32-бітне число з рухомою комою і зберігає його половинне значення для подальшого використання. Тоді, трактуючи числа з рухомою комою як цілі, виконується (логічний зсув) вправо на один біт і результат віднімається від магічного числа 0x5f3759df. Це буде першим наближенням до оберненого квадратного кореня вхідного числа. Знов трактуючи біти як число з рухомою комою проводиться одна ітерація методу Ньютона, щоб результат був точнішим. Так обчислення наближеного значення оберненого квадратного кореня для числа з рухомою комою відбувається приблизно вчетверо швидше ніж із використанням ділення чисел з рухомою комою.
Огляд коду
Наступний код є реалізацією оберненого квадратного кореня з Quake III Arena, з нього видалені директиви препроцесора, але залишені оригінальні коментарі:
float Q_rsqrt( float number ) { long i; float x2, y; const float threehalfs = 1.5F; x2 = number * 0.5F; y = number; i = * ( long * ) &y; // злий хак із рухомою комою на бітовому рівні i = 0x5f3759df - ( i >> 1 ); // що за чортівня? y = * ( float * ) &i; y = y * ( threehalfs - ( x2 * y * y ) ); // 1-ша ітерація //y = y * ( threehalfs - ( x2 * y * y ) ); // 2-га ітерація, це можна видалити return y; }
Для визначення оберненого квадратного кореня визначається наближення для , тоді за допомогою чисельного методу це наближення переглядається, щоб отримати прийнятну похибку у кінцевому результаті. на початку 1990-х отримували перше наближення із таблиці пошуку. Цей шматок коду виявився швидшим ніж використання таблиці пошуку і приблизно в чотири рази швидший ніж звичайне ділення чисел з рухомою комою. Хоча деяка втрата точності і відбувалася, але її перекривало значне покращення швидкодії. Алгоритм був розроблений для специфікації 32 бітних чисел з рухомою комою, але подальші дослідження Кріса Ломонта і Чарльза Макінері показали, що його можна реалізувати і для інших специфікацій.
Переваги у швидкості пропоновані швидким оберненим квадратним коренем з'явились завдяки трактуванню довгого слова, що містить число з рухомою комою як цілого і віднімання його від специфічної сталої, 0x5f3759df. Ціль цієї сталої не одразу очевидна для читача коду, отже, як і багато інших сталих знайдених у коді, її називають магічним числом. Це цілочисельне віднімання і бітовий зсув дають довге слово, яке знов трактується як число з рухомою комою і є грубим наближенням оберненого квадратного кореня вхідного числа. Одна ітерація методу Ньютона виконується для отримання більшої точності, і код завершується. Алгоритм генерує прийнятно точні результати використовуючи унікальне перше наближення для методу Ньютона; однак, він набагато повільніший ніж використання SSE інструкції rsqrtss
на x86 процесорах також випущеної у 1999.
Робочий приклад
Як приклад, розглянемо число x = 0.15625, для якого ми хочемо обчислити 1/√x ≈ 2.52982. Перші кроки алгоритму проілюстровані нижче:
0011_1110_0010_0000_0000_0000_0000_0000 Вигляд x та i на бітовому рівні 0001_1111_0001_0000_0000_0000_0000_0000 Зсув вправо на одну позицію: (i >> 1) 0101_1111_0011_0111_0101_1001_1101_1111 Магічне число 0x5f3759df 0100_0000_0010_0111_0101_1001_1101_1111 Результат 0x5f3759df — (i >> 1)
Використовуючи IEEE 32 бітове представлення:
0_01111100_01000000000000000000000 1.25 * 2^-3 0_00111110_00100000000000000000000 1.125 * 2^-65 0_10111110_01101110101100111011111 1.432430... * 2^+63 0_10000000_01001110101100111011111 1.307430... * 2^+1
Інтерпретування останнього бітового представлення як числа з рухомою комою дає наближення y = 2.61486, яке має похибку близько 3.4%. Після однієї ітерації метода Ньютона, кінцевим результатом є y = 2.52549, і помилка становить лише 0.17%.
Перебіг алгоритму
Алгоритм обчислює 1/√x виконуючи такі кроки:
- Інтерпретує аргумент x як ціле, як спосіб приблизного обчислення log2(x)
- Використовує це наближення для обчислення наближення log2(1/√x)
- Знов інтерпретує як число з рухомою комою, як спосіб для обчислення наближення 1/√x
- Уточнює наближення використовуючи метод Ньютона.
Представлення чисел з рухомою комою
Оскільки алгоритм сильно покладається на представлення чисел одинарної точності з рухомою комою на бітовому рівні, короткий огляд цього представлення наведений тут. Для того, щоб закодувати ненульове дійсне число x як число із рухомою комою одинарної точності, перший крок полягає в записуванні x як нормалізованого двійкового числа:
де показник ex є цілим, mx ∈ [0, 1), і 1.b1b2b3... це двійкове представлення мантиси (1 + mx). Варто зазначити, що оскільки єдиний біт перед комою у мантисі завжди 1, то немає потреби його зберігати. З цієї форми маємо три беззнакові цілі числа:
- Sx, знаковий біт, це 0 якщо x > 0, і 1 якщо x < 0 (1 біт)
- Ex = ex + B — це зміщена експонента, де B = 127 — зсув (8 бітів)
- Mx = mx × L, де L = 223 (23 bits)
Ці поля пакуються зліва направо у 32 бітовий контейнер.
Як приклад розглянемо число x = 0.15625 = 0.001012. Нормалізація x дає:
і отже, три беззнакові цілочисельні поля такі:
- S = 0
- E = −3 + 127 = 124 = 011111002
- M = 0.25 × 223 = 2097152 = 010000000000000000000002
ці поля пакуються як показано нижче:
Інтерпретування цілим як приблизний логарифм
Якби комусь довелось порахувати 1/√x без комп'ютера чи калькулятора, то йому б стала в пригоді таблиця логарифмів разом із тотожністю logb(1/√x) = −½ logb(x), яка дійсна для кожної основи b. Швидкий обернений квадратний корінь базується на цій тотожності і на факті, що інтерпретація float32 у ціле число дає грубе наближення цього логарифма. Ось як:
Якщо x це додатне нормальне число:
тоді ми маємо
але оскільки mx ∈ [0, 1), логарифм праворуч можна приблизно порахувати через
де σ — це вільний параметр використовуваний для налаштування наближення. Наприклад, σ = 0 дає точний результат на обох кінцях інтервалу, тоді як σ ≈ 0.0430357 дає оптимальне наближення (найкраще у сенсі рівномірної норми похибки).
Отже, ми маємо наближення
З іншого боку, інтерпретування бітового представлення x як цілого дає
Тоді виявляється, що Ix є масштабованим і зсунутим кусково-лінійним наближенням log2(x), як показано на зображенні праворуч. Інакше кажучі, log2(x) наближується за допомогою
Перше наближення результату
Обчислення y = 1/√x базується на тотожності
Використовуючи наближення логарифму наведене вище, застосоване до обох x і y, рівняння дає:
З цього, наближення для Iy таке:
що записано в коді як
i = 0x5f3759df - ( i >> 1 );
Перший доданок вище це магічне число
з якого можна зробити висновок, що σ ≈ 0.0450466. Другий доданок, ½ Ix, обрахований через бітовий зсув Ix на одну позицію праворуч.
Метод Ньютона
Після використання цих цілочисельних операцій, алгоритм знов розглядає довге слово як число з рухомою комою (y = *(float*)&i;
) і виконує операцію множення із рухомою комою (y = y*(1.5f - xhalf*y*y);
). Ця операція представляє одну ітерацію методу Ньютона. Тут ми маємо:
- — це обернений квадратний корінь, або, як функція від y,
- .
- As представляє загальне вираження методу Ньютона із як перше наближення,
- де і .
- Тому
y = y*(1.5f - xhalf*y*y);
є тим самим, що
Виноски
- Використання типа
long
зменшує переносність цього коду на сучасні системи. Для того, щоб код виконався правильно,sizeof(long)
повинен бути 4 байти, інакше можна отримати від'ємний результат. На багатьох сучасних 64-бітних системах,sizeof(long)
становить 8 байтів. - Ex має бути в діапазоні [1, 254] для x, щоб бути представна як .
- Єдиними числами представними точно як числа з рухомою комою це ті у яких Mx є цілим. Інші числа можна представити лише приблизно, округлюючи їх до найближчого цілого.
- Sx = 0 оскільки x > 0.
Примітки
- Sommefeldt, Rys (29 листопада 2006). . Beyond3D. Архів оригіналу за 9 лютого 2009. Процитовано 12 лютого 2009.
- . Архів оригіналу за 2 липня 2015. Процитовано 8 травня 2016.
- Eberly, 2001, с. 504.
- Lomont, 2003, с. 1.
- McEniry, 2007, с. 1.
- Lomont, 2003, с. 3.
- McEniry, 2007, с. 2, 16.
- Eberly, 2002, с. 2.
- Ruskin, Elan (16 жовтня 2009). . Some Assembly Required. Архів оригіналу за 18 травня 2015. Процитовано 7 травня 2015.
- McEniry, 2007, с. 3.
- Hennessey & Patterson 1998, p. 305.
Документи
- Blinn, Jim (July 1997). Floating Point Tricks. Computer Graphics & Applications, IEEE. 17 (4): 80. doi:10.1109/38.595279.
- Blinn, Jim (2003). Jim Blinn's Corner: Notation, notation notation. Morgan Kaufmann. ISBN .
- Eberly, David (2001). 3D Game Engine Design. Morgan Kaufmann. ISBN .
- Hennessey, John; Patterson, David A. (1998). Computer Organization and Design (вид. 2nd). San Francisco, CA: Morgan Kaufmann Publishers. ISBN .
- Kushner, David (August 2002). The wizardry of Id. IEEE Spectrum. 39 (8): 42—47. doi:10.1109/MSPEC.2002.1021943.
- Lomont, Chris (February 2003). (PDF). Архів оригіналу (PDF) за 6 лютого 2009. Процитовано 13 лютого 2009.
- McEniry, Charles (August 2007). (PDF). Архів оригіналу (PDF) за 11 травня 2015. Процитовано 13 лютого 2009.
- Middendorf, Lars; Mühlbauer, Felix; Umlauf, George; Bodba, Christophe (1 червня 2007). Embedded Vertex Shader in FPGA. У Rettberg, Achin (ред.). Embedded System Design: Topics, Techniques and Trends. IFIP TC10 Working Conference:International Embedded Systems Symposium (IESS). et al. : Springer. ISBN .
- Striegel, Jason (4 грудня 2008). . Hackszine. O'Reilly Media. Архів оригіналу за 15 лютого 2009. Процитовано 7 січня 2013.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Shvidkij obernenij kvadratnij korin inodi zgaduvanij yak Fast InvSqrt abo za shistnadcyatkovoyu staloyu 0x5f3759df ce metod obchislennya f x 1x displaystyle f x frac 1 sqrt x obernenogo kvadratnogo korenya dlya 32 bitnogo chisla u formati chisel z ruhomoyu komoyu IEEE 754 Algoritm jmovirno rozrobili u Silicon Graphics na pochatku 1990 h i realizaciya z yavilas 1999 roku v sircevomu kodi Quake III Arena ale metod ne z yavlyavsya na publichnih forumah yak ot Usenet do 2002 chi 2003 Isnuye obgovorennya na kitajskomu forumi rozrobnikiv CSDN u 2000 Na toj chas osnovna perevaga algoritmu polyagala u vikoristanni zamist obchislyuvalno dorogih operacij nad chislami z ruhomoyu komoyu operacij nad cilimi chislami Obernenij kvadratnij korin vikoristovuyut dlya obchislennya kutiv padinnya i vidbivannya dlya osvitlennya i shejdinga v komp yuternij grafici Dlya obchislennya osvitlennya i viddzerkalennya pokazano u shuteri vid pershoyi osobi OpenArena vikoristovuyutsya shvidkij obernenij kvadratnij korin dlya obchislennya kutiv padinnya i vidbittya Algoritm prijmaye 32 bitne chislo z ruhomoyu komoyu i zberigaye jogo polovinne znachennya dlya podalshogo vikoristannya Todi traktuyuchi chisla z ruhomoyu komoyu yak cili vikonuyetsya logichnij zsuv vpravo na odin bit i rezultat vidnimayetsya vid magichnogo chisla 0x5f3759df Ce bude pershim nablizhennyam do obernenogo kvadratnogo korenya vhidnogo chisla Znov traktuyuchi biti yak chislo z ruhomoyu komoyu provoditsya odna iteraciya metodu Nyutona shob rezultat buv tochnishim Tak obchislennya nablizhenogo znachennya obernenogo kvadratnogo korenya dlya chisla z ruhomoyu komoyu vidbuvayetsya priblizno vchetvero shvidshe nizh iz vikoristannyam dilennya chisel z ruhomoyu komoyu Oglyad koduNastupnij kod ye realizaciyeyu obernenogo kvadratnogo korenya z Quake III Arena z nogo vidaleni direktivi preprocesora ale zalisheni originalni komentari float Q rsqrt float number long i float x2 y const float threehalfs 1 5F x2 number 0 5F y number i long amp y zlij hak iz ruhomoyu komoyu na bitovomu rivni i 0x5f3759df i gt gt 1 sho za chortivnya y float amp i y y threehalfs x2 y y 1 sha iteraciya y y threehalfs x2 y y 2 ga iteraciya ce mozhna vidaliti return y Dlya viznachennya obernenogo kvadratnogo korenya viznachayetsya nablizhennya dlya x 1 2 displaystyle x 1 2 todi za dopomogoyu chiselnogo metodu ce nablizhennya pereglyadayetsya shob otrimati prijnyatnu pohibku u kincevomu rezultati na pochatku 1990 h otrimuvali pershe nablizhennya iz tablici poshuku Cej shmatok kodu viyavivsya shvidshim nizh vikoristannya tablici poshuku i priblizno v chotiri razi shvidshij nizh zvichajne dilennya chisel z ruhomoyu komoyu Hocha deyaka vtrata tochnosti i vidbuvalasya ale yiyi perekrivalo znachne pokrashennya shvidkodiyi Algoritm buv rozroblenij dlya specifikaciyi 32 bitnih chisel z ruhomoyu komoyu ale podalshi doslidzhennya Krisa Lomonta i Charlza Makineri pokazali sho jogo mozhna realizuvati i dlya inshih specifikacij Perevagi u shvidkosti proponovani shvidkim obernenim kvadratnim korenem z yavilis zavdyaki traktuvannyu dovgogo slova sho mistit chislo z ruhomoyu komoyu yak cilogo i vidnimannya jogo vid specifichnoyi staloyi 0x5f3759df Cil ciyeyi staloyi ne odrazu ochevidna dlya chitacha kodu otzhe yak i bagato inshih stalih znajdenih u kodi yiyi nazivayut magichnim chislom Ce cilochiselne vidnimannya i bitovij zsuv dayut dovge slovo yake znov traktuyetsya yak chislo z ruhomoyu komoyu i ye grubim nablizhennyam obernenogo kvadratnogo korenya vhidnogo chisla Odna iteraciya metodu Nyutona vikonuyetsya dlya otrimannya bilshoyi tochnosti i kod zavershuyetsya Algoritm generuye prijnyatno tochni rezultati vikoristovuyuchi unikalne pershe nablizhennya dlya metodu Nyutona odnak vin nabagato povilnishij nizh vikoristannya SSE instrukciyi rsqrtss na x86 procesorah takozh vipushenoyi u 1999 Robochij priklad Yak priklad rozglyanemo chislo x 0 15625 dlya yakogo mi hochemo obchisliti 1 x 2 52982 Pershi kroki algoritmu proilyustrovani nizhche 0011 1110 0010 0000 0000 0000 0000 0000 Viglyad x ta i na bitovomu rivni 0001 1111 0001 0000 0000 0000 0000 0000 Zsuv vpravo na odnu poziciyu i gt gt 1 0101 1111 0011 0111 0101 1001 1101 1111 Magichne chislo 0x5f3759df 0100 0000 0010 0111 0101 1001 1101 1111 Rezultat 0x5f3759df i gt gt 1 Vikoristovuyuchi IEEE 32 bitove predstavlennya 0 01111100 01000000000000000000000 1 25 2 3 0 00111110 00100000000000000000000 1 125 2 65 0 10111110 01101110101100111011111 1 432430 2 63 0 10000000 01001110101100111011111 1 307430 2 1 Interpretuvannya ostannogo bitovogo predstavlennya yak chisla z ruhomoyu komoyu daye nablizhennya y 2 61486 yake maye pohibku blizko 3 4 Pislya odniyeyi iteraciyi metoda Nyutona kincevim rezultatom ye y 2 52549 i pomilka stanovit lishe 0 17 Perebig algoritmuAlgoritm obchislyuye 1 x vikonuyuchi taki kroki Interpretuye argument x yak cile yak sposib pribliznogo obchislennya log2 x Vikoristovuye ce nablizhennya dlya obchislennya nablizhennya log2 1 x Znov interpretuye yak chislo z ruhomoyu komoyu yak sposib dlya obchislennya nablizhennya 1 x Utochnyuye nablizhennya vikoristovuyuchi metod Nyutona Predstavlennya chisel z ruhomoyu komoyu Dokladnishe Chislo odinarnoyi tochnosti Oskilki algoritm silno pokladayetsya na predstavlennya chisel odinarnoyi tochnosti z ruhomoyu komoyu na bitovomu rivni korotkij oglyad cogo predstavlennya navedenij tut Dlya togo shob zakoduvati nenulove dijsne chislo x yak chislo iz ruhomoyu komoyu odinarnoyi tochnosti pershij krok polyagaye v zapisuvanni x yak normalizovanogo dvijkovogo chisla x 1 b1b2b3 2ex 2ex 1 mx displaystyle begin aligned x amp pm 1 b 1 b 2 b 3 ldots times 2 e x amp pm 2 e x 1 m x end aligned de pokaznik ex ye cilim mx 0 1 i 1 b1b2b3 ce dvijkove predstavlennya mantisi 1 mx Varto zaznachiti sho oskilki yedinij bit pered komoyu u mantisi zavzhdi 1 to nemaye potrebi jogo zberigati Z ciyeyi formi mayemo tri bezznakovi cili chisla Sx znakovij bit ce 0 yaksho x gt 0 i 1 yaksho x lt 0 1 bit Ex ex B ce zmishena eksponenta de B 127 zsuv 8 bitiv Mx mx L de L 223 23 bits Ci polya pakuyutsya zliva napravo u 32 bitovij kontejner Yak priklad rozglyanemo chislo x 0 15625 0 001012 Normalizaciya x daye x 2 3 1 0 25 displaystyle x 2 3 1 0 25 i otzhe tri bezznakovi cilochiselni polya taki S 0 E 3 127 124 011111002 M 0 25 223 2097152 010000000000000000000002 ci polya pakuyutsya yak pokazano nizhche Interpretuvannya cilim yak pribliznij logarifm Yakbi komus dovelos porahuvati 1 x bez komp yutera chi kalkulyatora to jomu b stala v prigodi tablicya logarifmiv razom iz totozhnistyu logb 1 x logb x yaka dijsna dlya kozhnoyi osnovi b Shvidkij obernenij kvadratnij korin bazuyetsya na cij totozhnosti i na fakti sho interpretaciya float32 u cile chislo daye grube nablizhennya cogo logarifma Os yak Yaksho x ce dodatne normalne chislo x 2ex 1 mx displaystyle x 2 e x 1 m x todi mi mayemo log2 x ex log2 1 mx displaystyle log 2 x e x log 2 1 m x ale oskilki mx 0 1 logarifm pravoruch mozhna priblizno porahuvati cherez log2 1 mx mx s displaystyle log 2 1 m x approx m x sigma de s ce vilnij parametr vikoristovuvanij dlya nalashtuvannya nablizhennya Napriklad s 0 daye tochnij rezultat na oboh kincyah intervalu todi yak s 0 0430357 daye optimalne nablizhennya najkrashe u sensi rivnomirnoyi normi pohibki Interpretuvannya chisla z ruhomoyu komoyu IEEE 754 x yak cilogo Ix yak ot C float x int32 t i int32 t amp x daye masshtabovane i zsunute nablizhennya logarifmu z osnovoyu 2 Otzhe mi mayemo nablizhennya log2 x ex mx s displaystyle log 2 x approx e x m x sigma Z inshogo boku interpretuvannya bitovogo predstavlennya x yak cilogo daye Ix ExL Mx L ex B mx L ex mx s B s Llog2 x L B s displaystyle begin aligned I x amp E x L M x amp L e x B m x amp L e x m x sigma B sigma amp approx L log 2 x L B sigma end aligned Todi viyavlyayetsya sho Ix ye masshtabovanim i zsunutim kuskovo linijnim nablizhennyam log2 x yak pokazano na zobrazhenni pravoruch Inakshe kazhuchi log2 x nablizhuyetsya za dopomogoyu log2 x IxL B s displaystyle log 2 x approx frac I x L B sigma Pershe nablizhennya rezultatu Obchislennya y 1 x bazuyetsya na totozhnosti log2 y 12log2 x displaystyle log 2 y frac 1 2 log 2 x Vikoristovuyuchi nablizhennya logarifmu navedene vishe zastosovane do oboh x i y rivnyannya daye IyL B s 12 IxL B s displaystyle frac I y L B sigma approx frac 1 2 biggl frac I x L B sigma biggr Z cogo nablizhennya dlya Iy take Iy 32L B s 12Ix displaystyle I y approx frac 3 2 L B sigma frac 1 2 I x sho zapisano v kodi yak i 0x5f3759df i gt gt 1 Pershij dodanok vishe ce magichne chislo 32L B s 0x5f3759df displaystyle frac 3 2 L B sigma text 0x5f3759df z yakogo mozhna zrobiti visnovok sho s 0 0450466 Drugij dodanok Ix obrahovanij cherez bitovij zsuv Ix na odnu poziciyu pravoruch Metod Nyutona Dokladnishe Metod Nyutona Pislya vikoristannya cih cilochiselnih operacij algoritm znov rozglyadaye dovge slovo yak chislo z ruhomoyu komoyu y float amp i i vikonuye operaciyu mnozhennya iz ruhomoyu komoyu y y 1 5f xhalf y y Cya operaciya predstavlyaye odnu iteraciyu metodu Nyutona Tut mi mayemo y 1x displaystyle y frac 1 sqrt x ce obernenij kvadratnij korin abo yak funkciya vid y f y 1y2 x 0 displaystyle f y frac 1 y 2 x 0 As yn 1 yn f yn f yn displaystyle y n 1 y n frac f y n f y n predstavlyaye zagalne virazhennya metodu Nyutona iz yn displaystyle y n yak pershe nablizhennya yn 1 yn 3 xyn2 2 displaystyle y n 1 frac y n 3 xy n 2 2 de f y 1y2 x displaystyle f y frac 1 y 2 x i f y 2y3 displaystyle f y frac 2 y 3 Tomu y y 1 5f xhalf y y ye tim samim sho yn 1 yn 1 5 xyn22 yn 3 xyn2 2 displaystyle y n 1 y n left 1 5 frac xy n 2 2 right frac y n 3 xy n 2 2 VinoskiVikoristannya tipa long zmenshuye perenosnist cogo kodu na suchasni sistemi Dlya togo shob kod vikonavsya pravilno sizeof long povinen buti 4 bajti inakshe mozhna otrimati vid yemnij rezultat Na bagatoh suchasnih 64 bitnih sistemah sizeof long stanovit 8 bajtiv Ex maye buti v diapazoni 1 254 dlya x shob buti predstavna yak Yedinimi chislami predstavnimi tochno yak chisla z ruhomoyu komoyu ce ti u yakih Mx ye cilim Inshi chisla mozhna predstaviti lishe priblizno okruglyuyuchi yih do najblizhchogo cilogo Sx 0 oskilki x gt 0 PrimitkiSommefeldt Rys 29 listopada 2006 Beyond3D Arhiv originalu za 9 lyutogo 2009 Procitovano 12 lyutogo 2009 Arhiv originalu za 2 lipnya 2015 Procitovano 8 travnya 2016 Eberly 2001 s 504 Lomont 2003 s 1 McEniry 2007 s 1 Lomont 2003 s 3 McEniry 2007 s 2 16 Eberly 2002 s 2 Ruskin Elan 16 zhovtnya 2009 Some Assembly Required Arhiv originalu za 18 travnya 2015 Procitovano 7 travnya 2015 McEniry 2007 s 3 Hennessey amp Patterson 1998 p 305 Dokumenti Blinn Jim July 1997 Floating Point Tricks Computer Graphics amp Applications IEEE 17 4 80 doi 10 1109 38 595279 Blinn Jim 2003 Jim Blinn s Corner Notation notation notation Morgan Kaufmann ISBN 1 55860 860 5 Eberly David 2001 3D Game Engine Design Morgan Kaufmann ISBN 978 1 55860 593 0 Hennessey John Patterson David A 1998 Computer Organization and Design vid 2nd San Francisco CA Morgan Kaufmann Publishers ISBN 978 1 55860 491 9 Kushner David August 2002 The wizardry of Id IEEE Spectrum 39 8 42 47 doi 10 1109 MSPEC 2002 1021943 Lomont Chris February 2003 PDF Arhiv originalu PDF za 6 lyutogo 2009 Procitovano 13 lyutogo 2009 McEniry Charles August 2007 PDF Arhiv originalu PDF za 11 travnya 2015 Procitovano 13 lyutogo 2009 Middendorf Lars Muhlbauer Felix Umlauf George Bodba Christophe 1 chervnya 2007 Embedded Vertex Shader in FPGA U Rettberg Achin red Embedded System Design Topics Techniques and Trends IFIP TC10 Working Conference International Embedded Systems Symposium IESS et al Springer ISBN 978 0 387 72257 3 Striegel Jason 4 grudnya 2008 Hackszine O Reilly Media Arhiv originalu za 15 lyutogo 2009 Procitovano 7 sichnya 2013