- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
世界上最快的浮点开方算法
任何一个3D引擎都是通过其内部的数学模型和实现工具来展现它的力量与速度的,Quake?III中使用了一个非常有意思的技巧来计算平方根倒数(inverse?square?root)
Carmacks?不寻常平方根倒数?卡马克算法 第一个跳出来的便是对函数Q_rsqrt中对0x5f3759df的使用,这个数计算了一个浮点数的inverse?square?root,但是为什么这个函数有这样的功能呢?? 观察q_math.c原本的函数:?
[c-sharp]?view plaincopyprint?
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?);??
??y??=?*?(?float?*?)?i;??
??y??=?y?*?(?threehalfs?-?(?x2?*?y?*?y?)?);?//?1st?iteration????
??y??=?y?*?(?threehalfs?-?(?x2?*?y?*?y?)?);?//?2nd?iteration,?this?can?be?removed????
y??=?y?*?(?threehalfs?-?(?x2?*?y?*?y?)?);//增加精度值
??return?y;???//返回倒数?
}????
它不仅有效,甚至在某些CPU上,Carmack的Q_rsqrt?比(float)(1.0/sqrt(x)的计算快4倍,尽管sqrt()通常使用的是FSQRT的汇编指令! 在另一个文件code/common/cm_trace.c?中,我们发现了更简洁的对同样HACK的实现。这一次,它被用来计算一个float?-?sqrt(x)的平方根。注意,其中的唯一不同是在返回值上--用返回*y取代了返回y。??
[c-sharp]?view plaincopyprint?
float?SquareRootFloat(float?number)?{??
????long?i;???
????float?x,?y;???
????const?float?f?=?1.5F;????
????x?=?number?*?0.5F;??
????y??=?number;???
????i??=?*?(?long?*?)?y;????
????i??=?0x5f3759df?-?(?i??1?);????
????y??=?*?(?float?*?)?i;????
????y??=?y?*?(?f?-?(?x?*?y?*?y?)?);????
????y??=?y?*?(?f?-?(?x?*?y?*?y?)?);????
????return?number?*?y;????//返回开方
}???
牛顿对根的近似值? 上面的代码执行了众所周知的牛顿对根的近似值,像绝大多数其它迭代求近似值的计算一样,牛顿近似值假定是迭代的;每一次迭代都增强了它的准确度直至达到需要的准确度。 在牛顿近似值中的一般想法是我们我们猜测一个数x的平方根值y,我们可能通过一个简单的操作用x/y来拉平y来取得更好的猜测,使其更接近实际的平方根,例如,我们像下面这样计算2的平方根,我们假定初始的猜测是1:
[c-sharp]?view plaincopyprint?
2/1?=?2?;??(2?+?1)?/?2?=?1.5???
2/1.5?=?1.3333;?(?1.5?+?1.3333?)?/?2?=?1.4167???
2/1.4167?=?1.4117;??(?1.4167?+?1.4117?)?/?2?=?1.4142???
And?so?on...????
如前面所提到的,牛顿的近似值是一个大家所熟知的用以快速计算平方根的方法。但是,Carmack在初始的猜测中就选取的不寻常的值,它彻底加强了准确度并且将Quake?III中计算所要的值的迭代次数降到了1次!
魔数? 这个函数中真正有意思的方面是神奇的常量0x5f3759df,用来计算初始猜测的,在?
[c-sharp]?view plaincopyprint?
i??=?0x5f3759df?-?(?i??1?);????
因此,把输入除以2并从神奇常量中减去。这个常
您可能关注的文档
- 【异乡好居】房价飙升 加拿大四分之一的人愿合资买房.pdf
- 【异乡好居】拒绝高房价,悉尼Alta Miranda低价好房.pdf
- 【异乡好居】日本年轻人为何拒绝当“房奴”?.pdf
- 【异乡好居】澳洲房产未来十大热点区域.docx
- 【异乡好居】澳洲房产: 澳洲房产贷款什么情况下可以考虑?.pdf
- 【异乡好居】澳洲房价亲民,The Address联排别墅依山傍水一线高尔夫景房.pdf
- 【异乡好居】澳洲黄金海岸新公寓房到底为何吸引人?.pdf
- 【异乡好居】纽约富人偏爱联排别墅 布鲁克林大批经典住房崭新回归.pdf
- 【异乡好居】站在伦敦之巅(Spire London)俯瞰全城,住豪华最高楼享低调房价.pdf
- 【异乡好居】美国10城市租房买房成本接近 多数在加州.pdf
最近下载
- 第五章 中国特色社会主义理论体系的形成发展.pptx VIP
- 饭店服务与管理应用专业实施性教学计划.doc VIP
- 浅析PAT在实施QbD中的作用.pdf VIP
- 单位评价师德表现 .pdf VIP
- 《烟花爆竹基础知识》课件.ppt VIP
- T SHZSAQS 00178—2023 棉花膜下滴灌优质高产栽培水氮管理技术规程.pdf VIP
- GB∕T33000-2025《大中型企业安全生产标准化管理体系要求》修订解读、分析和应对说明表【2025-02雷泽佳编制】.pdf VIP
- 承包商hse管理业务培训考试题(含答案).doc
- 国开管理英语1学习行为评价.pdf VIP
- 【培训课件】公立医院内部控制政策解读.pptx
原创力文档


文档评论(0)