Тайна, хранившаяся 55 лет: раскрыта ошибка в коде легендарной игры Lunar Lander

Тайна, хранившаяся 55 лет: раскрыта ошибка в коде легендарной игры Lunar Lander

Энтузиаст распутал математическую загадку древней игры о Луне.

image

Софтверный инженер на пенсии Мартин К. Мартин недавно обнаружил ошибку в коде обработки легендарной компьютерной игры «Lunar Lander», созданной ещё в 1969 году, той самой, где нужно сажать лунный модуль на поверхность Луны. Открытие было сделано при изучении оптимальной стратегии посадки модуля с максимальной экономией топлива.

Первая версия игры «Lunar Lander» (с англ. «Лунный модуль») была написана 17-летним школьником Джимом Сторером на миникомпьютере PDP-8 с использованием языка программирования FOCAL. В тексте игры отображались только статусные обновления о положении лунного модуля во время посадки на поверхность Луны. Геймерам необходимо было аккуратно управлять расходом топлива для обеспечения мягкой посадки, принимая критически важные решения каждые 10 секунд о количестве сжигаемого топлива.

Эта примитивная игра проложила путь для будущих версий. В 1974 году появилась графическая версия, а в 1979-м - аркадная игра от Atari, благодаря которым «Lunar Lander» стала широко известна. К 40-летию первой высадки человека на Луну в 2009 году энтузиаст нашёл автора оригинальной игры Джима Сторера, взял у него интервью и составил историю создания «Lunar Lander». Позже Сторер опубликовал исходный код игры на своём сайте.

Проведя анализ кода в 2024 году, эксперт по ИИ и бывший научный сотрудник MIT Мартин К. Мартин выявил ошибку в реализации физических расчётов. Баг срабатывал при попытке максимально эффективной посадки с помощью техники «самоубийственного торможения», известной среди поклонников игры Kerbal Space Program. Эта стратегия подразумевает свободное падение для наращивания скорости и последующее включение двигателей в самый последний момент для безопасного торможения.

«Недавно я исследовал оптимальный режим сжигания топлива для максимально мягкой посадки с высокой остаточной тягой, - написал Мартин в своём блоге. - Неожиданно оказалось, что теоретически лучшая стратегия не работала. Игра ошибочно считала, что модуль не касается поверхности, хотя на самом деле это происходило. Вникнув глубже, я был поражён сложностью физических расчётов и численных вычислений в игре. В итоге я нашёл ошибку: отсутствие операции деления на два, которая, по всей видимости, никем не замечалась почти 55 лет».

Дело в делении

Несмотря на применение, казалось бы, идеальной стратегии посадки, игра противоречиво сообщала, что модуль полностью промахнулся мимо поверхности Луны. Заинтригованный этой аномалией, Мартин изучил исходный код и обнаружил, что алгоритм посадки базировался на продвинутой для того времени физике, включая уравнение ракетного движения Циолковского и ряд Тейлора.

Как упоминалось в цитате выше, корень проблемы крылся в банальной вычислительной оплошности - отсутствии деления на два в формуле, рассчитывающей траекторию лунного модуля. Это незначительное, на первый взгляд, упущение имело серьёзные последствия, приводя к неправильному расчёту времени до посадки и самой посадки. Несмотря на ошибку, Мартин был впечатлён тем, что Сторер, будучи старшеклассником, смог внедрить в свою игру продвинутые математические концепты, что по-прежнему остаётся весомым достижением сегодня.

Связавшись с самим Сторером, Мартин узнал, что отец автора «Lunar Lander» был физиком и помог сыну вывести уравнения для игровой симуляции.

Хотя люди играли в игру Сторера с багом многие годы, это показывает, что реализм не всегда является самой важной частью захватывающего интерактивного опыта. И, к счастью для Олдрина и Армстронга, настоящая лунная экспедиция "Аполлона" не страдала от подобной ошибки.

Ищем темную материю и подписчиков!

Одно найти легче, чем другое. Спойлер: это не темная материя

Станьте частью научной Вселенной — подпишитесь