- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
卡马克的求平方根的倒数的程序(快速平方根倒数算法)
卡马克的求平方根的倒数的程序(快速平方根倒数算法) 2009-09-18 10:45:01| 分类: HYPERLINK /blog/#m=0t=1c=fks_087064085087088067087085080095083086088068085081080068离奇的code | 标签: |字号大中小 订阅 这个程序,大概在2006年看到的,当时进行了分析,主要分析了位运算那部分:如何利用浮点数的位表示法快速计算一个近似值。而对于整个迭代计算原理并没有仔细看,今天再重新分析一下,并把当时那部分分析写的更明了些。 原贴如下:---------------------------------------------------------------------------------------------------------- 发信人: interma ( 4PZP | 抓紧时间 | OFG P ), 信区: C_Cpp标 题: [zz] 源自Quake3的快速求InvSqrt()函数发信站: 兵马俑BBS (Mon Dec 4 13:11:36 2006), 本站() HYPERLINK /article.pl?sid=06/12/04/0210205from=rss/article.pl?sid=06/12/04/0210205from=rss 人们很早就在Quake3源代码中发现了如下的C代码,它可以快速的求1/sqrt(x),在3D图形向量计算方面应用很广。float InvSqrt(float x){ float xhalf=0.5f*x; long i=*(long*)x; i=0x5f3759df - (i1); x=*(float *)i; x=x*(1.5f-xhalf*x*x); return x;}Beyond3D.com的Ryszard Sommefeldt一直在想到底是哪个家伙写了这些神奇的代码?2003年Chris Lomont还写了一篇文章(PDF)对这些代码进行了分析。毫无疑问写出这些代码的人绝对是天才。 是John Carmack?Michael Abrash?John Carmack在邮件回复中明确表示不是他,也不是Michael,可能是Terje Matheson。于是侦探Ryszard又向Terje Mathisen寻求答案。Terje说他写过类似的高效代码,但上面的不是。他猜测可能在MIT的旧文档中可以找到。Ryszard的求证之路显然无止境。 ☆──────────────────────────────────────☆ phylips 于 Tue Dec 5 10:04:42 2006 提到: 分析了一下,关于计算过程还是可以理解的 但是关于其中的数学依据,只能看出一部分 主要思想利用了浮点数的表示法,ieee的标准 其中关键部分是 long i=*(long*)x; i=0x5f3759df - (i1); x=*(float *)i; 其他地方都比较简单,这三句的意思,应当是把x的浮点表示格式直接看出long类型的, 然后进行0x5f3759df - (i1)运算,之后再直接把long类型的看成float类型的。其中 的数学道理,我大致看了下 对于浮点数的表示,在ieee里float类型是按照符号.指数.尾数格式进行的 其中符号位1位,指数位8位,尾数23位,先只考虑了指数部分, long i=*(long*)x是把浮点数看成了与他具有相同位格式的long型数 i=0x5f3759df - (i1) 对于0x5f3759df如果看成浮点数的话,其指数位为(0101)(1111)0-1011111=190 设原来的xIEEE表示的指数位为a则新的结果的指数位变成了190-a/2;注意如果要转换成 m*2^n格式,需要将指数a-127;所以得到的新结果用数学表示的指数位为190-a/2-127= 63-a/2 而x的原来如果从ieee格式变成数学表示应为a-127 比较63-a/2与a-127 可以看出指数之间的关系为63-a/2==(a-127)*(-1/2) 所以经过上述三句,x应该已经是1/sqrt(x)的近似值 然后下面的应该是继续进行了精化,具体依据还没搞懂 【 在 interma ( 4PZP | 抓紧时间 | OFG P ) 的大作中提到: 】 ☆──────────────────────────────────────☆ xiao
文档评论(0)