Глава 100
Если академик Чжань Юншу был искренне удивлён, то сам Хао Юнь, решая эту задачу, особо не заморачивался.
Вся идея пришла к нему в голову в момент, когда он просто почесал затылок — чистая импровизация.
Он взял за основу алгоритм, который сначала угадывает приближённое значение 1/√x, а затем уточняет его через итерации по методу Ньютона.
С точки зрения логики, новая версия функции, которую он переписал, почти не отличалась от исходной Q_Sqrt, использовавшейся в math.c файле “Ледникового движка”.
Обе функции работали по одному и тому же принципу.
Но была одна тонкая разница — в том самом таинственном числе: 0x5f375a86.
Согласно методу Ньютона, чем ближе начальное приближение к реальному значению, тем меньше нужно итераций.
И вот это магическое число 0x5f375a86 как раз и служит для расчёта начального приближения.
Хао Юнь случайно обнаружил, что если использовать именно это значение, то результат получается настолько близким к 1/√n, что метод Ньютона требует всего две итерации, чтобы достичь нужной точности!
А как это число вообще получилось?
Хао Юнь и сам понятия не имел.
Он просто доверился интуиции:
показалось, что число, использованное в оригинальной версии, не самое удачное,
и он решил подставить другое, “наглаз” лучшее.
Сначала он попробовал несколько разных значений — и все работали хуже.
Но потом, почти случайно, наткнулся на 0x5f375a86, и — о чудо! — всего две итерации, и готово!
Честно говоря, он сам был в шоке.
Возможно, это связано с тем, что его характеристика “Математика” уже достигла уровня “мастерства”?
Так или иначе, после использования этого особенного числа, по количеству операций функция работала в два раза быстрее, чем исходная Q_Sqrt из math.c.
А насколько это повлияет на работу всего движка?..
Хао Юнь не знал.
Он не был экспертом в “Ледниковом движке”.
Хотя он и занимался разработкой игр, в его “арсенале” была только 2048, а проект вроде “Temple Run”, созданный на движке, похожем на “Ледниковый”, делал в основном Ли Цзунчжэн — сам Хао Юнь туда почти не лез.
Да и вообще, в этом мире инструменты для создания игр стали настолько “глупо-дружелюбными”, что большинство игр среднего и малого масштаба можно создать, имея простой движок и уровень программирования второго курса.
…Только вот как мне протестировать, насколько повысилась эффективность движка?— пробормотал он.
На этом компе даже нет ни одного тестера или игры для замеров?
Он облазил всю систему — никаких программ для оценки производительности движка, ни даже тестовой игры.
И в самом деле — организаторы не собирались включать такой инструмент.
Потому что в глубине души они были уверены: никто и близко не сможет выполнить это “задание-смертник”.
Чёрт, это вообще что за издевательство?!— воскликнул Хао Юнь, уставившись в пустой экран, потом с горькой усмешкой пожал плечами.
Создавать игру с нуля только ради замеров?
В теории — можно.
Но — нет доступа к интернету, нет ассетов, и времени толком нет.
С нуля писать движок и игру ради теста?..
Забей.
Раз уж лучшего способа оптимизации нет,
Хао Юнь вздохнул, и нажал кнопку “Сдать” в конкурсной программе.
Он убрал руки с клавиатуры.
На выполнение заданий давалось три дня,
без минимального времени сдачи — можно было сдать в любой момент.
Обычно участники сдавали ближе к обеду,
чтобы потом с друзьями вместе выйти поесть.
Хао Юнь тоже так планировал.
Но в его кабине не было вообще ничего, и сидеть без дела три часа он не мог.
Так что он встал и вышел.
На выходе из зала стоял тот же охранник, что и утром.
Они переглянулись.
В туалет? — Ты не в ту сторону пошёл.
Нет, — я уже закончил.
Закончил?.. Серьёзно?
Ага. — Можно выйти?
Охранник, наконец, вышел из ступора,
и открыл проход.
Два года назад он тоже охранял финал Кубка Надежды здесь, в Шядунском педагогическом университете.
И, если он правильно помнил, первый сдавший тогда участник вышел только в пять вечера.
Сейчас же с момента начала экзамена не прошло и часа…
Что за… неужели он сдал пустой файл?
Но это же финалист, прошедший отбор из десятков тысяч работ!
Не может же он сдать пустую работу?..
На самом деле, в шоке были не только охранники.
Члены жюри в закулисье были в куда большем замешательстве.
Особенно профессор Чжан Цунхао.
После того как он прочитал переписанную Хао Юнем функцию, его лицо стало… неверующим.
Он взял черновик, перепроверил все формулы вручную, и в конце концов не выдержал:
Чёрт возьми!..
Откуда он взял это число?!
Это же… просто невозможно!
Одна единственная правка — начального значения и вдруг — в два раза выше скорость выполнения функции?!
Рядом с ним Фэн Чжэнцин, менеджер софт-отдела корпорации “Лунвэй”, потянул его за рукав и прошептал:
Если встроить это в движок, насколько он станет быстрее?
Минимум процентов на двадцать, — В 3D-движках вычисление обратного квадратного корня используется очень часто.
Двадцать?!
Он был не программист, и не знал, что такое метод Ньютона, но понимал, что это уже за гранью фантастики.
“Ледниковый движок”, хоть и не ключевой продукт “Лунвэй”, разрабатывался лучшими из лучших.
И никто из них не нашёл этого способа.
А тут — школьник?!
Да быть такого не может!
Профессор Чжан снова и снова смотрел на формулы, и чувствовал, что это уже выходит за пределы его знаний.
Рядом стоял старый профессор из Национального университета обороны.
Он долго молчал, а затем выдохнул:
Невероятно… Он нашёл прорыв там, где его не должно было быть. Я всегда считал, что функции в math.c уже идеальны, что они — оказывается, что можно ещё лучше.
Этот парень
А профессор Чжан стоял в раздумьях.
Он наконец поднял глаза на своего учителя, академика Чжан Юншу.
Простите, но… Такой ответ
Академик взглянул на него.
Ты всё ещё сомневаешься?
Не то чтобы сомневаюсь… просто… это как-то… обидно. Он ведь даже не переписал код по сути! Это же чистая математика!
Да! Это не программирование — это математика!
Он лишь изменил число, и, совершенно случайно, ускорил одну из базовых функций движка в два раза?!
Но почему именно это число?..
Профессор Чжан уже сходил с ума, но так и не понял.
Академик Чжань вдруг улыбнулся.
Ну а кто тебе сказал, что это не математика?
Он тоже не знал, откуда взялось это число.
Ни малейшей идеи.
Интуиция?
Бывает и такое.
Многие математические константы поначалу были найдены “по наитию”, и только десятилетия или даже века спустя была доказана их точность.
Глядя на уходящего из зала участника,
академик тихо подумал:
Возможно… вот он — настоящий гений.