Быстрый обратный квадратный корень: различия между версиями

[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
Строка 136:
На положительных числах [[биекция]] «дробное ↔ целое» (ниже обозначенная как <math>I_x</math>) непрерывна как [[кусочно-линейная функция]] и [[монотонная функция|монотонна]]. Отсюда сразу же можно заявить, что быстрый обратный корень, как комбинация непрерывных функций, непрерывен. А первая его часть — сдвиг-вычитание — к тому же монотонна и кусочно-линейна. Биекция сложна, но почти «бесплатна»: в зависимости от архитектуры процессора и [[соглашение о вызове|соглашений вызова]], нужно или ничего не делать, или переместить число из дробного регистра в целочисленный.
 
В примере выше целочисленное представление равняется 0x3E20.0000, и оно раскладывается так: знаковое поле 0, смещённый порядок{{efn|name="dots"}} 011.1110.0<sub>2</sub>=124, несмещённый 124−127=−3, явная часть мантиссы 0,010100…<sub>2</sub>, полная мантисса 1,01<sub>2</sub>=1,25, и числовое значение {{nobr|1=1,25·2<sup>−3</sup>=0,15625}}.
 
Обозначим <math>m_x \in [0,1)</math> явную часть мантиссы числа <math>x</math>, <math>e_x \in \mathbb{Z}</math> — несмещённый порядок, <math>L=2^{23}</math> — разрядность мантиссы, <math>B=127</math> — смещение порядка. Число{{efn|Здесь и далее ≡ означает «равно по определению».}} <math>x \equiv 2^{e_x} (1 + m_x)</math> будет иметь целочисленное представление <math>I_x \equiv L(e_x + B + m_x)</math>. Можно выписать и обратное преобразование: <math>e_x = \left\lfloor \tfrac{I_x}{L} - B \right\rfloor</math>, <math>m_x = \left\{ \tfrac{I_x}{L} \right\}</math>, ведь первое целое, а второе от 0 до 1.