
平方根倒数速算法
用來求某個實數的平方根的倒數的演算法 / 维基百科,自由的 百科全书
平方根倒数速算法(英语:,亦常以“Fast InvSqrt()”或其使用的十六进制常数0x5f3759df代称)是用于快速计算(即
的平方根的倒数,在此
需取符合IEEE 754标准格式的32位浮点数)的一种算法。这一算法的优势在于减少了求平方根倒数时浮点运算操作带来的巨大的运算耗费,而在计算机图形学领域,若要求取照明和投影的波动角度与反射效果,就常需计算平方根倒数。

此算法首先接收一个32位带符浮点数,然后将之作为一个32位整数看待,以将其向右进行一次逻辑移位的方式将之取半,并用在浮点数规格代表近似值的十六进制“”0x5f3759df减之,如此即可得对输入的浮点数的平方根倒数的首次近似值;而后重新将其作为浮点数,以牛顿法反复迭代,以求出更精确的近似值,直至求出符合精确度要求的近似值。在计算浮点数的平方根倒数的同一精度的近似值时,此算法比直接使用浮点数除法要快四倍。
此算法最早被认为是由约翰·卡马克于90年代前期在SGI Indigo(英语:)的开发中使用,后来则于1999年在《雷神之锤III竞技场》的源代码中应用,但直到2002-2003年间才在Usenet一类的公共论坛上出现[1]。后来的调查显示,该算法在这之前就于计算机图形学的硬件与软件领域有所应用,如SGI和3dfx就曾在产品中应用此算法,但至今为止仍未能确切知晓算法中所使用的特殊常数的起源。
Oops something went wrong: