`
varsoft
  • 浏览: 2566376 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

《雷神之锤III》里求平方根的函数

阅读更多
更新:有人问这个算法的原理。其实原理很简单。就是牛顿迭代求根。卡马克算法牛X的地方就是他选了一个常数作为起始值。而这个起始值让他只用一次迭代就够了。

这里看来的。QuakeIII自然就是传奇高手卡马克的杰作之一了。在有的CPU上,这个函数比普通的(float)(1.0/sqrt(x)快4倍!快的原因之一是用了一个神秘常数,0x5f3759df。普渡大学的Chris Lomont在这篇论文里讨论了这个常数的意义,尝试用严格的方法推导出这个常数(他还提到有人认为这个函数是在NVidia工作过的Gary Tarolli写的)。Chris推出的常数是0x5f37642f),和Q_rsqrt里的稍有不同,而且实际表现也稍有不如。卡马克到底怎么推出这个常数的就是谜了。这种高手不写书,实在可惜。
float Q_rsqrt( float number )
{
long i;
float x2, y;
const float threehalfs = 1.5F;

x2 = number * 0.5F;
y = number;
i = * ( long * ) &y; // evil floating point bit level hacking
i = 0x5f3759df - ( i >> 1 ); // what the fuck?
y = * ( float * ) &i;
y = y * ( threehalfs - ( x2 * y * y ) ); // 1st iteration
// y = y * ( threehalfs - ( x2 * y * y ) ); // 2nd iteration, this can be removed

#ifndef Q3_VM
#ifdef __linux__
assert( !isnan(y) ); // bk010122 - FPE?
#endif
#endif
return y;
}
分享到:
评论

相关推荐

    单片机C语言求平方根函数.doc

    单片机C语言求平方根函数

    c语言练习之开平方根函数

    c语言练习之开平方根函数

    C#求平方根小程序 C#求平方根小程序 C#求平方根小程序

    C#求平方根小程序 C#求平方根小程序 C#求平方根小程序C#求平方根小程序 C#求平方根小程序 C#求平方根小程序

    易语言源码易语言汇编代码求平方根.rar

    易语言源码易语言汇编代码求平方根.rar 易语言源码易语言汇编代码求平方根.rar 易语言源码易语言汇编代码求平方根.rar 易语言源码易语言汇编代码求平方根.rar 易语言源码易语言汇编代码求平方根.rar 易语言源码...

    平方根函数Quake III

    Quake III公开源码后,有人在game/code/q_math.c里发现了这样一段代码。它的作用是将一个数开平方并取倒数。但这段代码真正牛B的是那个神秘的0x5f3759df常数,这篇论文比较科学地解释了这个常数。

    汇编语言求平方根的问题

    求平方根是数学中的基本运算,但在计算机硬件层面,没有直接提供求平方根的指令。因此,在80386汇编语言中实现求平方根通常需要采用数值计算方法,如牛顿迭代法或二分查找法。 牛顿迭代法是一种快速收敛的数值近似...

    易语言汇编代码求平方根

    易语言汇编代码求平方根源码,汇编代码求平方根,平方根

    易语言汇编代码求平方根.7z

    易语言汇编代码求平方根.7z

    C语言程序设计-程序举例求平方根.pptx

    C语言程序设计-程序举例求平方根 C语言是一种广泛使用的高级编程语言,它具有强大的编程能力和灵活性。今天,我们将通过一个简单的程序举例,来了解如何使用C语言求平方根。 标题解释 标题“C语言程序设计-程序...

    C语言程序设计-编写自定义函数fun,计算实数a、b的平方根之和

    编写自定义函数fun,计算实数a、b的平方根之和(要求:数据的输入、输出在主函数中实现,例如:输入12和20,输出结果是:y = 7.936238)。

    F4求平方根程序.rar

    在这个“F4求平方根程序”中,开发者创建了一个基本的函数,用于在STM32F4单片机上计算平方根。 首先,了解Cortex-M4的浮点处理能力至关重要。Cortex-M4内核集成了硬件浮点单元,支持单精度(SP)和半精度(HP)...

    利用牛顿迭代法求平方根.pdf

    ### 利用牛顿迭代法求平方根 #### 核心知识点概述 牛顿迭代法是一种高效的数值计算方法,常用于求解方程的近似解。本文将详细介绍如何使用牛顿迭代法来求解一个正数的平方根,并通过具体的实例来验证其有效性。 #...

    基于FPGA快速平方根算法的实现

    平方根算法作为科学计算与工程应用中的基础运算之一,其应用场景非常广泛,包括但不限于三角学、二次方程求解、二维建模、误差计算、数值分析、概率统计、图像处理以及信号处理等领域。尽管如此,由于平方根运算本身...

    平方根的倒数速算

    该算法广泛应用于游戏开发、计算机图形学领域,並且在《雷神之锤 III 竞技场》的源代码中得到了应用。 平方根倒数速算法的实现需要使用到浮点数的位级操作和牛顿迭代法,以获取平方根倒数的近似值。该算法的代码...

    平方根函数sqrt(int x)(java代码).docx

    ### 平方根函数sqrt(int x)的Java实现 #### 概述 本文将详细介绍如何在Java中实现一个计算整数平方根的函数`sqrt(int x)`。此函数旨在求解给定非负整数`x`的平方根,并返回其整数部分。为了达到这一目标,采用了一...

    迭代法求平方根.zip

    在编程领域,尤其是在C语言中,迭代法是一种常用的数值计算方法,用于求解各种问题,如本例中的求平方根。迭代法通过一系列逐步逼近的近似值来找到精确解,这种方法尤其适用于不能直接求解的复杂问题。在这个案例中...

    求平方根另一种算法

    求平方根另一种算法

    利用Servlet求平方根的完美实例

    在这个"利用Servlet求平方根的完美实例"中,我们可能会看到以下关键步骤: 1. **创建Servlet类**:在Java中,Servlet是一个实现了`javax.servlet.Servlet`或`javax.servlet.http.HttpServlet`接口的类。在这个例子...

    C语言简单编程-迭代法求正数平方根

    C语言简单编程-迭代法求平方根不采用MATH.H的库函数-,

    易语言源码易语言求高精度平方根源码.rar

    易语言源码易语言求高精度平方根源码.rar 易语言源码易语言求高精度平方根源码.rar 易语言源码易语言求高精度平方根源码.rar 易语言源码易语言求高精度平方根源码.rar 易语言源码易语言求高精度平方根源码.rar ...

Global site tag (gtag.js) - Google Analytics