女生: 哈喽大家好欢迎收听,我们的播客。啊今天我们要聊一聊,平方根算法。啊他的这个历史啊,他的这个应用啊,以及他在不同领域带来的影响。
男生: 听起来很有意思哎那我们就赶紧开始吧看看这个算法是怎么从。古老的手动计算一步一步的走到今天的这个现代技术的。
女生: 哎那我们今天这一期节目内容,有哪些特别的地方呢,或者说我们的灵感来源是哪里呢?
男生: 今天的内容啊是我们在。李坚毅博士的这个。整理的基础上啊我们来给大家聊一聊这个平方根计算。它的这个历史啊以及它的一些技术的细节啊,对从。很古老的一些手动的方法。到现在的一些游戏引擎里面的一些快速的运算啊,对其实里面有很多。人类的智慧的结晶在里面的。
女生: 就是说这个平方根的计算方法它是怎么一步一步的,从这个历史的长河当中发展过来的呢?
男生: 这个故事要从公元前三百年说起啊,那个时候呢,欧几里得。在他的几何原本里面提到了这个。辗转相减的这种开方的方法,然后呢几乎同时期啊我们中国的刘徽。发明了割圆术,啊用这个正多边形去逼近这个圆,他算到了。3072边形啊得到了圆周率是3.1416,啊这都是非常。让人惊叹的,手动计算的这个极限了。
女生: 哇,那在当时应该是,非常先进的计算方式了。
男生: 是的是的是的,然后后面呢就。计算尺,计算尺的出现啊就可以通过这种对数的刻度的这种滑动啊来计算。近似的平方根,再到巴贝奇的差分机。用这种齿轮的传动来计算多项式展开,再到。一九四六年的 ENIAC,啊那个时候用电子管的计算机来计算平方根,已经可以达到。零点零一秒,啊这样的一个速度了,对其实每一次都是。人类对于计算效率的这种,不断的追求啊,才有了这些一步步的革新。
女生: 我们现在,呃现代的这个计算机里面。是怎么来计算平方根的呢,就是这个牛顿迭代法到底是个什么东西啊,它是怎么发展起来的呢?
男生: 这个牛顿迭代法呢它其实是。最早是在一六六九年,牛顿他在分析学里面提到的一种方法,它其实的核心思想是。通过,函数的切线。来不断的逼近这个方程的根,那如果我们要求,比如说 a 的平方根。那我们其实就是要解这个方程,x² - a = 0的根,那它的这个迭代公式就是。xₙ₊₁ = (xₙ + a/xₙ)/2。那,这个东西其实它的,收敛速度是非常非常快的,啊比如说我们要计算。根号二,那我们如果从一开始迭代的话。我们只需要迭代三次。就可以得到,误差在十的负四次方以内的这样的一个结果。
女生: 哇,这么快就可以收敛到一个比较精确的值啊!
男生: 对,然后这个方法呢也在计算机的发展当中被不断的优化,啊比如说。五零年代的时候 IBM 的工程师就把这个牛顿迭代法做到了硬件里面。那个时候大型机就可以在微秒级的时间内计算出平方根。但是呢在个人计算机上面,早期的处理器比如说 Intel 的八零八六。他算一个浮点开方要两百多个时钟周期,所以那个时候程序员们又想了很多办法。通过整数的位运算来模拟浮点数的操作,进一步的提高效率。
女生: 那这个卡马克算法到底是个什么东西啊它为什么在游戏开发当中这么重要呢?
男生: 卡马克算法呢它其实是一九九九年的时候,随着 Quake III 的源码一起被公开的一个算法。它其实就是一个二十七字节的一个函数。但是它却可以把,平方根的倒数。这个计算速度提高四倍,啊哈,那在当时的游戏开发当中。就意味着,你可以用这个算法让那些很低端的 PC 也能够比较流畅的运行。三 D 的游戏。
女生: 哇,一个算法竟然可以带来这么大的性能提升啊!
男生: 对,它的核心呢其实是。把浮点数当成整数来进行位运算,啊然后用一个非常巧妙的常数。0x5f3759df,啊这个常数来直接生成一个。比较高精度的初始猜测值,再通过一次牛顿迭代来进行修正。啊,后面甚至有人研究说发现了一个更好的常数,0x5f375a86。啊但是其实卡马克选的这个数,在游戏的场景下面是误差最小的。啊所以你就不得不佩服他这个,对于实际应用的把握。
女生: 这几种平方根的算法,在实际应用当中到底有哪些,明显的差异呢?
男生: 这个其实李坚毅博士他也整理了一个非常直观的对比,比如说。二分法,它可能需要二十次以上的迭代才能收敛。但是它的精度是比较高的,所以它适合在一些嵌入式系统里面使用。那标准的牛顿法呢它可能只需要三到五次迭代就可以达到。IEEE 的标准,那它一般是用在科学计算里面。
女生: 那卡马克算法是不是就是为了游戏特别优化的?
男生: 对没错没错!卡马克算法他就是用一次迭代就可以达到游戏级的精度,然后它的速度是。非常快的,是二分法的四倍,所以它非常适合用在三 D 图形引擎里面。那当然现在的现代的 CPU 指令那就是更更快了,它可以达到八倍速。精度也非常的高,它是用在这种向量处理器里面的。
女生: 这个平方根算法除了在游戏开发当中还有哪些,意想不到的应用场景呢?
男生: 这个算法其实你想不到它还被用在 NASA 的火星探测器上面。啊,用来节省它的算力,哦对然后包括在粒子对撞机的数据处理上面。还有这个 AI 的训练的梯度下降的优化上面都有。用到这个算法的思想,哦对甚至现在的 GPU 的张量核心可以。每秒做数万亿次的这种开方运算,所以它的应用其实非常非常广泛。
女生: 你觉得平方根算法在未来会有哪些,新的突破呢?
男生: 我觉得随着现在比如说 AVX 五百一十二这种指令集的普及啊其实。软件层面的优化已经。越来越难取得更大的收益了,但是在一些比如物联网设备啊或者是边缘计算上面。可能还是会需要用到一些像卡马克算法这种。位运算的技巧,对来减少资源的消耗。
女生: 听起来好像这些技巧在特定的场景下面还是会发光发热啊!
男生: 对没错没错!然后包括未来的话可能会有。量子计算,通过这种叠加态来并行的求解平方根。还有可能会有这种神经形态芯片,通过模拟人脑的这种近似计算的能力来做。还有甚至可能会有这种光计算。通过这种干涉条纹直接输出开方的结果,对这些都有可能会。彻底的改变我们现在的计算方式。
女生: 我们今天聊了这么多关于平方根算法的,历史啊应用啊包括未来的可能的发展。你觉得我们可以从中,总结出一个什么样的,比较深刻的结论呢?
男生: 就是我觉得从。阿基米德的穷竭法到卡马克的这个位运算的技巧。其实这个平方根的计算的历史就是一部人类不断的追求效率的史诗。然后它在游戏引擎里面的这种。技术的实现让我们看到了一种,纯粹的技术之美。就像费曼说的那句话,What I cannot create I do not understand.
女生: 对哇今天我们真的是,回顾了这个平方根算法,从。古代的手动计算到现代的硬件加速的,辉煌的历程啊,然后也看到了它在游戏开发。和其他领域的一些,非常精彩的应用。
男生: 以上就是这期播客的全部内容啦,感谢大家的收听咱们下期再见拜拜!

