搜索
bottom↓
回复: 46

网上无意中看到的居说很神的平方根倒数快速算法

  [复制链接]

出0入0汤圆

发表于 2020-2-15 17:19:40 | 显示全部楼层 |阅读模式
最精简的1/sqrt()函数:

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

另外还有个
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;
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2020-2-15 17:21:47 来自手机 | 显示全部楼层
早就有了,以前还用过了

出0入0汤圆

发表于 2020-2-15 19:34:25 | 显示全部楼层
没看明白

出10入284汤圆

发表于 2020-2-15 19:56:19 来自手机 | 显示全部楼层
卡马克算法

出0入0汤圆

发表于 2020-2-15 20:39:34 来自手机 | 显示全部楼层
雷神之锤

出10入284汤圆

发表于 2020-2-15 21:14:29 来自手机 | 显示全部楼层
arm 发表于 2020-2-15 19:34
没看明白

网上有解释,主要知识点是IEEE754及牛顿迭代

出10入18汤圆

发表于 2020-2-15 22:21:00 来自手机 | 显示全部楼层
我以为是口算?。。。

出0入0汤圆

发表于 2020-2-15 22:30:50 | 显示全部楼层
0x5f3759df,Quake-III Arena (雷神之锤3)代码里的的魔数。
原始代码里的备注是// what the fuck?  

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入96汤圆

发表于 2020-2-16 11:26:50 | 显示全部楼层
不管了,先收藏,

出0入0汤圆

发表于 2020-2-16 12:06:59 来自手机 | 显示全部楼层
牛逼的程序猿,数学肯定差不了,

出0入0汤圆

发表于 2020-2-16 12:11:55 | 显示全部楼层
没看明白,先收藏

出0入0汤圆

发表于 2020-2-16 12:42:00 来自手机 | 显示全部楼层
很早就有贴了  好像国外有人不信邪挨个测试  有个相似的数更准  

出0入0汤圆

发表于 2020-2-16 12:50:49 来自手机 | 显示全部楼层
有意思,一楼两段代码里的常数不同:0x5f375a86 VS 0x5f3759df

出0入0汤圆

发表于 2020-2-16 13:04:26 | 显示全部楼层
这个是很著名的一个算法,搞过姿态解算的一般都知道这个算法,可以看看这里 https://en.wikipedia.org/wiki/Fast_inverse_square_root

出0入0汤圆

发表于 2020-2-16 13:28:38 | 显示全部楼层
先收藏                       

出1310入193汤圆

发表于 2020-2-16 13:55:00 来自手机 | 显示全部楼层
算法,程序灵魂

出0入0汤圆

发表于 2020-2-16 14:35:51 来自手机 | 显示全部楼层
以前坛里就有

出0入0汤圆

发表于 2020-2-16 15:36:06 | 显示全部楼层
motoedy 发表于 2020-2-15 22:30
0x5f3759df,Quake-III Arena (雷神之锤3)代码里的的魔数。
原始代码里的备注是// what the fuck?  {:titte ...

哈哈哈哈~~~~what the fuck

出0入0汤圆

发表于 2020-2-16 15:46:59 来自手机 | 显示全部楼层
先收藏,

出0入0汤圆

发表于 2020-2-16 16:49:33 | 显示全部楼层
早就知道了。但是用这个算法开平方需要求倒数,效率还是低了一点。 开平方还有一个更直接的快速算法。

出0入0汤圆

发表于 2020-2-16 17:00:52 | 显示全部楼层
这个好像精度不高

出200入2554汤圆

发表于 2020-2-16 17:03:49 来自手机 | 显示全部楼层
大致猜测下原理:目标是求 x^(-1/2),牛顿迭代需要有个接近结果的起始数,然后 fuck 那一行里的 >>1 最大作用是把float里二进制指数减半,这样量级就就近 ^(1/2) 处理了

出0入8汤圆

发表于 2020-2-16 17:05:19 | 显示全部楼层
详细原理这里有个介绍视频
「骚代码是怎样炼成的」解剖快速平方根倒数算法
https://www.bilibili.com/video/av52050885/

出0入0汤圆

发表于 2020-2-16 17:11:24 | 显示全部楼层
年前才刚用过

出0入0汤圆

发表于 2020-2-16 21:02:08 | 显示全部楼层
0x5f3759df 是卡马克选择的值

0x5f375a86是一个教授暴力求解的

这有详细介绍:https://blog.csdn.net/zyex1108/article/details/53540824

出0入8汤圆

发表于 2020-2-16 22:55:37 | 显示全部楼层
mark。。。

出10入210汤圆

发表于 2020-2-17 05:17:25 来自手机 | 显示全部楼层
看标题我以为是楼主学会口算了呢。

出0入0汤圆

发表于 2020-2-17 08:55:51 | 显示全部楼层
平方根倒数快速算法

出0入0汤圆

发表于 2020-2-17 08:57:45 | 显示全部楼层
学习一下,看看呢

出0入0汤圆

发表于 2020-2-17 08:59:38 来自手机 | 显示全部楼层
学习一下,不错,简洁

出0入0汤圆

发表于 2020-2-17 10:20:41 | 显示全部楼层
https://www.amobbs.com/forum.php ... 5851&highlight=开方       https://www.amobbs.com/forum.php ... 1525&highlight=开方     https://www.amobbs.com/forum.php ... 6598&highlight=开方

出0入34汤圆

发表于 2020-2-17 10:34:36 | 显示全部楼层
【转】神一样的算法,一个数开平方并取倒,0x5f3759df

出0入0汤圆

发表于 2020-2-17 20:21:34 来自手机 | 显示全部楼层
马克一下。

出0入0汤圆

发表于 2020-2-18 15:43:55 | 显示全部楼层
本帖最后由 AlexYzhov 于 2020-2-18 15:45 编辑

快是快,但是要注意数值范围。一些数值范围里这算法的精度跌的很厉害。实用时可以会在快速近似的基础上,再跑几轮迭代

出0入0汤圆

发表于 2020-2-18 16:20:08 来自手机 | 显示全部楼层
64位的常数是0x5fe6ec85e7de30da,谁能试一下?

出0入0汤圆

发表于 2020-2-21 09:22:52 | 显示全部楼层
卡马克的神来之笔,这哥们就是程序员楷模。

出0入0汤圆

发表于 2020-2-21 09:58:56 来自手机 | 显示全部楼层
马克,开平方

出0入8汤圆

发表于 2020-2-21 10:26:59 | 显示全部楼层
测试过在32位系统中有优势,在64位系统中已经没有优势了。

出0入0汤圆

发表于 2020-2-21 10:48:37 | 显示全部楼层
我看标题还以为是口算平方根的倒数

出0入0汤圆

发表于 2020-3-1 08:20:56 | 显示全部楼层
开平方倒数

出0入0汤圆

发表于 2020-3-1 08:57:48 来自手机 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2020-3-1 21:31:03 | 显示全部楼层
学习   

出105入79汤圆

发表于 2020-3-13 10:07:00 | 显示全部楼层
再倒一次就是快速开方算法

出0入0汤圆

发表于 2020-3-13 10:46:37 | 显示全部楼层
让我想起来高中时的一个物理老师,当时是个马上要退休的女教师,给我们在黑板上演示过一次徒手开方

出0入0汤圆

发表于 2020-3-13 11:20:01 来自手机 | 显示全部楼层
这个确实牛逼,当初看到,也是一句"What the fuck!"
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 10:06

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表