博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
神奇的Invsqrt函数
阅读量:6534 次
发布时间:2019-06-24

本文共 672 字,大约阅读时间需要 2 分钟。

1 float InvSqrt(float x)   2 {   3     float xhalf = 0.5f*x;   4     int i = *(int*)&x;      // get bits for floating VALUE   5     i = 0x5f375a86- (i>>1); // gives initial guess y0   6     x = *(float*)&i;        // convert bits BACK to float   7     x = x*(1.5f-xhalf*x*x); // Newton step, repeating increases accuracy   8     x = x*(1.5f-xhalf*x*x); // Newton step, repeating increases accuracy   9     x = x*(1.5f-xhalf*x*x); // Newton step, repeating increases accuracy  10     return 1/x;  11 }

这个代码是求x^(-1/2),使用牛顿迭代法迭代求解,

神奇的是其效率精度比默认函数还要高。

其中神秘的0x5f375a86是迭代的初始值,理论上可以使任意值,从它开始向最终结果逼近。

通过枚举可以验证选择0x5f375a86的精度最高。

转载于:https://www.cnblogs.com/gjl-blog/p/8502724.html

你可能感兴趣的文章
linux 安全
查看>>
String Boot中@Controller和@RestController的区别?
查看>>
混淆 泛型 反射
查看>>
scala Option,None和Some
查看>>
CentOS 5.5 下 rsync 使用技巧与权限问题解读
查看>>
C++ stl
查看>>
linux下的 python开发环境
查看>>
edx 汉化 lms 主讲教师->分析
查看>>
Windows8手机有截图功能?
查看>>
从ORACLE转战虚拟化 与VMware展开肉搏战来看
查看>>
新建文章 1
查看>>
CISCO无线AP胖瘦升级
查看>>
TensorFlow教程03:针对机器学习初学者的MNIST实验——回归的实现、训练和模型评估...
查看>>
ruby安装mysql2,pg模块
查看>>
java 同一个类中 多个synchronized 方法会造成死锁
查看>>
遍历map集合的三种方式
查看>>
20181124ACL的高级特性mask
查看>>
我的友情链接
查看>>
C语言变长数组之剖析
查看>>
CSS3窗帘式4格焦点图代码
查看>>