• 繁體(T)简体(S)正常(N)
  • 申请任务 银行[存取转账] AFF时间积分兑换 统计排行 帮助
    • 38阅读
    • 0回复

    [专题研究][240626]五十年前的登月文字游戏,被发现存在一个数学Bug

    级别: Lv.2
    发帖
    890
    MB
    30
    MD
    26
    本月打卡
    5
    活跃度
    10
    YQBD
    0
    国库券
    8
    文章来源:https://www.yystv.cn/p/11855

    [240626]五十年前的登月文字游戏,被发现存在一个数学Bug

    如果只关心登月的真伪,这样的故事就不会发生。

    1969年7月20日,阿波罗11号载人航天计划的成功,代表了人类探索的脚步首次踏足了月球的土地。

    我们暂时先抛开最近漫长且无休止的、关于人类登月事件真实性的相关争论,把时间拨回到50年前。

    1969年,美国一位17岁的高中生Jim Storer和其他人一样,通过电视直播见证了这一历史性的瞬间。

    而且几乎可以肯定的是,这位高中生当时一定没有想过去质疑这件事的真实性,因为深受启发的他随后利用当时流行的PDP-8计算机和FOCAL汇编语言设计出了人类历史上的第一款登月游戏《月球登陆器》(Lunar Lander)。

    当然,虽说是“游戏”,但《月球登陆器》和如今我们所理解的游戏还是有很大区别,比如它既没有画面也没有声音:
    《月球登陆器》游戏画面
    在60到70年代,由于当时的计算机没有图形界面,所以诞生了不少只使用代码和文字来呈现的游戏作品。

    《月球登陆器》虽然出自高中生之手,但它以文字的形式精确模拟了飞行器登陆月球时需要进行的操作。作为玩家,你需要同时考虑飞船高度、速度、引力、燃料量等多个因素,才能控制飞船在月球上平稳着陆。

    以当时的眼光看,这款游戏题材和操作模式都非常新颖,后续也曾在不同类型的计算机和平台上出现过复刻和模仿者,甚至在1979年,著名的雅达利公司还以它为概念设计了带有图形的街机版本,获得了更大的成功。当然,这些都是后话了。
    1979年的雅达利街机版
    之所以要介绍这款老游戏,是因为最近一位来自麻省理工学院的博士后研究员,意外发现了在《月球登陆器》中存在了55年,一直都没有人注意到的物理Bug。

    曾担任过软件工程师、AI研究员的Martin C. Martin最近在利用这款游戏研究飞行器着陆时的最佳燃料使用方案时,发现《月球登陆器》在源代码中使用的物理计算公式,少了一个关键性的“除以二”。

    虽然《月球登陆器》只是款游戏,虽然作者当时只是高中生,但它在设计飞行器的着陆轨道时,使用的却是相当严谨复杂的数学公式,其中就包括了被视为现代空间飞行器基础原理的“齐奥尔科夫斯基火箭方程”,完全参照了现实中飞行器着陆的原理设计。

    这就使得玩家可以通过真实里的数学公式来计算游戏的最优解,而当Martin参照现实中的着陆方案,经过一连串数学计算并将其在游戏中付诸实践时,却突然发现本应显示“完美着陆”的时机,结果却变成了“无法着陆”。

    于是抱着工程师的探求心态,Martin再次细致地研究了游戏所使用的公式和代码,最后他发现尽管游戏背后所涉及的知识非常专业,但作者还是在一个非常简单的地方出现了失误——在一个公式平方根内部的分母中少算了一个“2”。

    为什么会有这样的低级失误?Martin猜想是因为60年代计算机的代数系统和计算尚未成熟,作者可能依旧需要在纸上用笔进行整个公式的推导,因此出现了基础失误。

    尽管如此,Martin依旧惊讶于一个高中生能够掌握如此复杂的火箭知识,随后他联系到了游戏的作者Jim Storer,如今已经是布兰代斯大学计算机教授的Jim表示:

    “在高中时期我就对微积分等概念非常感兴趣,而父亲当时是就一位物理学家,他帮助我推导出了这些数学公式。

    Jim不会想到,当初仅仅是因为对登月感兴趣而创作的简单程序,会在之后的时间里影响如此多的玩家;更不会想到因为这款游戏,让两位科学的探寻者完成了一场跨越了55年的对话。
    描述
    快速回复

    您目前还是游客,请 登录注册
    如果您在写长篇帖子又不马上发表,建议存为草稿
    认证码: