鱼C论坛

 找回密码
 立即注册
查看: 1041|回复: 5

[技术交流] 就算是给我源代码也看不懂啊!!

[复制链接]
发表于 2023-12-20 03:44:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

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

x
本帖最后由 小甲鱼的二师兄 于 2023-12-20 03:48 编辑

据说下面代码来自雷神之锤3竞技场,用于计算数字的平方根:
float Q_rsqrt(float number)
{
    long i;
    float x2, y;
    const float threehalfs = 1.5F;

    x2 = number * 0.5F;
    y = number;
    i = * (long *) &y;
    i = 0x5f3759df - (i >> 1);
    y = * (float *) &i;
    y = y * (threehalfs - (x2 * y * y));

    return y;
}
给我源代码也看不懂……



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-20 03:44:50 | 显示全部楼层
哈哈,没事,源代码看起来可能确实有些晦涩难懂。我来讲解一下这段代码的作用和原理。

首先,这段代码是用来计算一个数字的平方根的。雷神之锤3竞技场是一款游戏,这段代码可能是游戏开发者为了在游戏中快速计算平方根而编写的。

该函数的名字叫做Q_rsqrt,接收一个float类型的参数number,并返回一个float类型的结果。

下面我们逐行来解释代码的每一部分:

float Q_rsqrt(float number) :这一行定义了一个名为Q_rsqrt的函数,接收一个float类型的参数number,并返回一个float类型的结果。

long i; :这一行定义了一个名为i的变量,类型为long。

float x2, y; :这一行定义了两个float类型的变量x2和y。

const float threehalfs = 1.5F; :这一行定义了一个名为threehalfs的常量,类型为float,值为1.5。

x2 = number * 0.5F; :这一行将参数number乘以0.5后赋值给变量x2。

y = number; :这一行将参数number赋值给变量y。

i = * (long *) &y; :这一行将变量y的地址转换为long类型,并将其值赋给变量i。

i = 0x5f3759df - (i >> 1); :这一行进行一系列位运算计算,实现对变量i的修改。

y = * (float *) &i; :这一行将变量i的地址转换为float类型,并将其值赋给变量y。

y = y * (threehalfs - (x2 * y * y)); :这一行使用变量y进行一系列计算,最终得到结果。

return y; :这一行将变量y作为函数的返回值。

总结一下,这段代码使用了一种近似计算平方根的方法,通过一系列位运算和数学计算来得到结果。但是这种方法并不是很精确,只适用于特定的情况,所以不建议直接使用这段代码。

如果你想计算平方根,可以考虑使用数学库提供的函数,例如math.sqrt()。这样更方便、更准确。希望我的解释能帮到你!如果还有其他问题,尽管问哦!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-20 03:46:22 | 显示全部楼层
FishC 发表于 2023-12-20 03:44
哈哈,没事,源代码看起来可能确实有些晦涩难懂。我来讲解一下这段代码的作用和原理。

首先,这段代码是用 ...

你真是个天才!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-20 03:46:29 | 显示全部楼层

哈哈,谢谢夸奖!我只是一个普通的计算机教育专家,有幸能够帮助你解决问题。编程有时候可能会困难和复杂,但只要我们保持耐心和积极的态度,相信每个人都能掌握它。如果你还有其他问题,我非常乐意帮助你。继续努力学习,你也会成为一个优秀的程序员的!加油!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-9 17:33:55 | 显示全部楼层
FishC 发表于 2023-12-20 03:44
哈哈,没事,源代码看起来可能确实有些晦涩难懂。我来讲解一下这段代码的作用和原理。

首先,这段代码是用 ...

好厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-9 17:34:06 | 显示全部楼层


哈哈,谢谢夸奖!其实编程的世界很有趣,只要耐心学习,每个人都可以成为厉害的程序员。而且,对于初学者来说,最重要的是保持好奇心和乐观态度。遇到问题不要灰心,可以多看一些教程、文档,或者向更有经验的人寻求帮助。编程的学习过程中,思考和实践同样重要,多动手写代码,尝试解决问题,也是进步的关键。只要坚持下去,你肯定会越来越厉害的!加油!如果还有其他问题,随时问我哦!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 03:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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