25 лет тому назад мир впервые увидел Quake III Arena!

И при чем тут Быстрый обратный квадратный корень.  19 сентября 1999 года мир впервые увидел Quake III Arena — игру, где виртуальные воины сражались в трёхмерных аренах. Но мало кто знал, что под капотом этой легенды скрывался алгоритм, навсегда изменивший представление о скорости вычислений.  В тот день в исходном коде id Software появилась функция с комментарием «зловещий хакинг чисел с плавающей запятой». Её авторы даже не подозревали, что их трюк станет легендой программирования:  i = 0x5f3759df - (i >> 1); // какого чёрта?  Этот код — сердце Fast Inverse Square Root, алгоритма для быстрого вычисления обратного квадратного корня. В эпоху, когда процессоры едва справлялись с 3D-графикой, он позволял рассчитывать освещение и траектории в десятки раз быстрее стандартных методов. Но как он работал? И почему до сих пор о нём говорят?  Тайна «магического числа»  В 2005 году исходный код Quake III стал открытым. Сообщество ахнуло: функция Q_rsqrt использовала битовые операции и загадочную константу 0x5f3759df. Программисты ломали голову: как преобразование целого числа в float может дать приближение обратного квадратного корня?  Объяснение звучало как магия:  ➖ Число с плавающей запятой разбирали на биты.  ➖ Сдвигали их вправо (делили на 2) и вычитали из «магического» числа.  ➖ Собирали обратно в float.  «Это как взять логарифм, умножить его на -0.5 и снова получить число», — шутили математики. Но за кулисами скрывался гениальный трюк: битовое представление float интерпретировали как целое число, что позволяло аппроксимировать результат через экспоненту и мантиссу.  Грег Уолш, создатель алгоритма, позже признался: «Мы искали способ убрать деление. Оказалось, всё решила пара битовых операций и метод Ньютона».

«Касательная, которая спасла Quake»  Первое приближение было грубым. Чтобы уточнить его, разработчики использовали метод Ньютона-Рафсона — итерационную формулу:  y = y * (1.5 - (x * 0.5 * y * y));  Всего один шаг — и погрешность сокращалась с 2% до 0.001%. Этого хватало, чтобы рендерить 60 кадров в секунду на Pentium III.

«Пол, посмотри! Мы заменили сотни операций тремя строчками кода» — возможно, так воскликнул программист id Software, запуская тесты.

В 1999 году алгоритм казался чудом. Но к 2020-м годам всё изменилось. Современные процессоры обзавелись инструкциями вроде rsqrtss, которые вычисляют обратный квадратный корень за такт. Тесты показали: на Intel Core i9 Fast Inverse Square Root в 4 раза медленнее аппаратной реализации.  Зачем тогда о нём помнить?  ➖ Гениальная простота. Алгоритм учит думать «вне рамок» — использовать биты как данные и как инструкции.  ➖ Исторический код. Без него игры вроде Quake III не смогли бы работать на слабых PC 90-х.  ➖ Вдохновение. Даже сегодня разработчики встраивают этот метод в микроконтроллеры без FPU.  Его алгоритм стал мостом между эпохами. В 1999-м он позволил железу выжать максимум, а сегодня напоминает: иногда гениальность кроется в одной строчке кода. Пусть даже с комментарием «какого чёрта?»

#АйтишныеБайки #IT #история #Quake
25 лет тому назад мир впервые увидел Quake III Arena! | Сетка — новая социальная сеть от hh.ru
repost

319

input message

напишите коммент

· 21.04

Познавательно 🫶

ответить

· 18.04

Вывод: производительное железо позволяет современным разрабам говнокодить..

ответить

еще контент в этом сообществе

еще контент в этом соообществе

войдите, чтобы увидеть

и подписаться на интересных профи

в приложении больше возможностей

пока в веб-версии есть не всё — мы вовсю работаем над ней

сетка — cоциальная сеть для нетворкинга от hh.ru

пересекайтесь с теми, кто повлияет на ваш профессиональный путь