快速平方根倒数算法也称为平方根倒数速算法(Fast Inverse Square Root)是用于快速计算的一种算法。此算法由于出现在《雷神之锤III竞技场》源代码中而被人们所熟知。此算法最早被认为是由约翰·卡马克所发明,但后来的调查显示,该算法在这之前就于计算机图形学的硬件与软件领域有所应用,此算法至今为止仍未能确切知晓算法中所使用的特殊常数的起源。

早已听闻这个算法的大名,这几天在做履带车的项目,无意中在树莓派上的源码里发现了这段代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**************************************
Date: May 31, 2020
Function: 平方根倒数 求四元数用到
***************************************/
float InvSqrt(float number)
{
volatile long i;
volatile float x, y;
volatile const float f = 1.5F;
x = number * 0.5F;
y = number;
i = * (( long * ) &y);
i = 0x5f375a86 - ( i >> 1 );
y = * (( float * ) &i);
y = y * ( f - ( x * y * y ) );

return y;
}

致敬 John Carmack