算法集合(1)----------InvSqrt算法

       

        Quake-III Arena (雷神之锤3)是90年代的经典游戏之一。该系列的游戏不但画面和内容不错,而且即使计算机配置低,也能极其流畅地运行。这要归功于它3D引擎的开发者约翰-卡马克(John Carmack)。事实上早在90年代初DOS时代,只要能在PC上搞个小动画都能让人惊叹一番的时候,John Carmack就推出了石破天惊的Castle Wolfstein, 然后再接再励,doom, doomII, Quake...每次都把3-D技术推到极致。他的3D引擎代码资极度高效,几乎是在压榨PC机的每条运算指令。当初MS的Direct3D也得听取他的意见,修改了不少API。

       上述故事得以发生,功臣之一便是InvSqrt函数。

 

 

       本篇算法自己也没深入理解,作为自己的知识储备。下面代码来自于技术讨论群。

#include <iostream>
using namespace std;

//神奇高效的InvSqrt算法
//功能: 求一个数的开平方的倒数, 即返回1/sqrt(x), 但该函数比标准的sqrt()函数快4倍!!!!
float InvSqrt(float x)
{
float xHalf = 0.5f * x;
int i = *(int *)&x;
i = 0x5f3759df - (i >> 1);
x = *(float *)&i;
x = x * (1.5f - xHalf * x * x);
return x;
}

void  main()
{
cout << InvSqrt(4) << endl;
cout << InvSqrt(9) << endl;
cout << InvSqrt(16) << endl;
}


运行结果:

取倒数:

 

精度和速度相比,速度已经占了很大优势。

对于精度这块,我的老师说的一句话很在理:(花4000元追求100%的完美)跟(花1000元追求99%+速度)这两者你觉得哪个值呢?

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值