[算法]快速平方根倒数算法学习-Fast Inverse Square Root

简介:平方根倒数速算法是一种用于快速计算32位浮点数的算术平方根的倒数的算法。该算法最早可能由SGI在90年代前期发明,并在1999年的《雷神之锤III竞技场》源代码中应用,但直到2002-2003年才在Usenet等公共论坛上出现。该算法的优势在于减少了求平方根倒数时浮点运算操作带来的大量运算耗费。在计算机图形学领域,例如计算照明和投影的波动角度与反射效果时,常需要计算平方根倒数。算法通过对32位带符浮点数进行一系列操作,包括右移、使用特定十六进制魔术数字的减法以及牛顿迭代法,以快速得到平方根倒数的近似值。该算法在相同精度下比直接使用浮点数除法快四倍。       

先给出平方根倒数算法的代码:

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));   // 2st iteration
										//this can be removed

	return y;
}

到底是什么样的代码能让3D游戏之父、FPS游戏之父、

你可能感兴趣的:(算法)