当前位置:首页 » 操作系统 » 卡马克算法

卡马克算法

发布时间: 2022-05-05 12:49:27

㈠ 求用C或C++语言计算平方根,要求不使用SQRT函数

一般我们求平方根使用牛顿迭代法,实现代码如下:

doublenewtonMethod(doubletoBeSqrted){
doublex=1.0;
while(abs(x*x-toBeSqrted)>1e-5){
x=(x+toBeSqrted/x)/2;
}
returnx;
}

还可以用二分查找,这个原理较为简单,不过算法复杂度较高。

floatsqrtByBisection(floatn){
if(n<0)
returnn;
floatmid,last;
floatlow,up;
low=0,up=n;
mid=(low+up)/2;
do{
if(mid*mid>n)
up=mid;
else
low=mid;
last=mid;
mid=(up+low)/2;
}while(abs(mid-last)>eps);

returnmid;
}

㈡ J2me相关问题,卡马克算法

我这有一个,留下QQ,晚上发给你

㈢ android绘图,怎么才能做出拖动画布效果

使用卡马克地图缓冲算法。
基本原理是使用drawBitmap (Bitmap bitmap, Rect src, RectF dst, Paint paint)方法。
将位图上指定的部分(src矩形部分)绘制到指定的屏幕位置(dst矩形部分),通过改变src矩形的位置改变实现地图的移动。
给你个连接,自己先看看。
http://xys289187120.blog.51cto.com/3361352/656998

㈣ c#卡马克算法 mac 上可以用吗

结构化算法是由一些基本结构顺序组成的。
在基本结构之间不存在向前或向后的跳转,流程的转移只存在于一个基本的结构范围内。
一个非结构化的算法可以用一个等价的结构化算法代替,其功能不变。
跟结构化算法比较起来,非结构化算法有以下缺点。
流程不受限制的随意转来转去,使流程图豪无规律。
使人在阅读的时候难以理解算法的逻辑。
难以阅读,也难以修改。
从而使算法的可靠性和可维护性难以保证。

㈤ 手机程序开发中,对人物滚屏行走有没有好点的算法

一般是应用相对位移来实现人物行走同背景移动的一致 在算法方面,建议看看卡马克卷轴算法,这个在实现上有一定难度,但是效果会很好

㈥ 代码量能衡量一个程序员的编程水平吗

能!

相同功能的前提下,代码量越少水平越高,代码耗时越少水平越高,很考验程序员算法功底以及对数字的敏感性。

比如网上流传的当年Quake iii中算平方根的函数,一般算开方需要不断迭代逼近,耗时较多,而卡马克的不同之处在于,他选择了一个神秘的猜测值 0×5f3759df作为起始,使得整个逼近过程收敛速度暴涨,对于Quake III所要求的精度10的负三次方,只需要一次迭代就能够得到结果。虽然我看不懂,但是提高程序执行效率,降低迭代/递归/循环次数,提高代码阅读性,以榨油的态度对待开发是每个程序员的终身目标。

floatSquareRootFloat(floatnumber)
{
longi;
floatx,y;
constfloatf=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));
returnnumber*y;
}

㈦ 《微微一笑很倾城》中肖奈大神说的平方根倒数速算法是什么鬼

平方根倒数速算法

平方根倒数速算法是适用于快速计算(积的平方根的倒数,在此需取符合IEEE 754标准格式的32位浮点数)的一种算法。

平方根倒数速算法(英语:Fast Inverse Square Root,亦常以“Fast InvSqrt()”或其使用的十六进制常数0x5f3759df代称)是用于快速计算(积的平方根的倒数,在此需取符合IEEE 754标准格式的32位浮点数)的一种算法。此算法最早可能是于90年代前期由SGI所发明,后来则于1999年在《雷神之锤III竞技场》的源代码中应用,但直到2002-2003年间才在Usenet一类的公共论坛上出现。这一算法的优势在于减少了求平方根倒数时浮点运算操作带来的巨大的运算耗费,而在计算机图形学领域,若要求取照明和投影的波动角度与反射效果,就常需计算平方根倒数。

此算法首先接收一个32位带符浮点数,然后将之作为一个32位整数看待,以将其向右进行一次逻辑移位的方式将之取半,并用十六进制“魔术数字”0x5f3759df减之,如此即可得对输入的浮点数的平方根倒数的首次近似值;而后重新将其作为浮点数,以牛顿法反复迭代,以求出更精确的近似值,直至求出符合精确度要求的近似值。在计算浮点数的平方根倒数的同一精度的近似值时,此算法比直接使用浮点数除法要快四倍。

中文名

平方根倒数速算法

外文名

Fast Inverse Square Root

定义

适用于快速计算的一种算法

备注

最早被认为由约翰·卡马克所发明

㈧ 这段惊世骇俗的代码强在什么地方,谁能看懂

0x5f3759df? 这是个什么东西? 学过数值分析就知道,算法里面求平方根一般采用
的是无限逼近的方法,比如牛顿迭代法,抱歉当年我数值分析学的太烂,也讲不清楚
。简单来说比如求5的平方根,选一个猜测值比如2,那么我们可以这么算

5/2 = 2.5; 2.5+2/2 = 2.25; 5/2.25 = xxx; 2.25+xxx/2 = xxxx ...
这样反复迭代下去,结果必定收敛于sqrt(5),没错,一般的求平方根都是这么算的
。而卡马克的不同之处在于,他选择了一个神秘的猜测值0x5f3759df作为起始,使得
整个逼近过程收敛速度暴涨,对于Quake III所要求的精度10的负三次方,只需要一
次迭代就能够得到结果。

好吧,如果这还不算牛b,接着看。

普渡大学的数学家Chris Lomont看了以后觉得有趣,决定要研究一下卡马克弄出来的
这个猜测值有什么奥秘。Lomont也是个牛人,在精心研究之后从理论上也推导出一个
最佳猜测值,和卡马克的数字非常接近, 0x5f37642f。卡马克真牛,他是外星人吗?

传奇并没有在这里结束。Lomont计算出结果以后非常满意,于是拿自己计算出的起始
值和卡马克的神秘数字做比赛,看看谁的数字能够更快更精确的求得平方根。结果是
卡马克赢了... 谁也不知道卡马克是怎么找到这个数字的。

最后Lomont怒了,采用暴力方法一个数字一个数字试过来,终于找到一个比卡马克数
字要好上那么一丁点的数字,虽然实际上这两个数字所产生的结果非常近似,这个暴
力得出的数字是0x5f375a86。

㈨ 什么是卡马克地图缓冲算法原理

结构化算法是由一些基本结构顺序组成的.在基本结构之间不存在向前或向后的跳转,流程的转移只存在于一个基本的结构范围内.一个非结构化的算法可以用一个等价的结构化算法代替,其功能不变.
跟结构化算法比较起来,非结构化算法有以下缺点.
流程不受限制的随意转来转去,使流程图豪无规律.使人在阅读的时候难以理解算法的逻辑.难以阅读,也难以修改.从而使算法的可靠性和可维护性难以保证.

热点内容
如何删除手机中的游戏缓存 发布:2024-10-07 02:11:28 浏览:873
解锁数据库用户 发布:2024-10-07 01:55:54 浏览:826
关系数据库的关键字是指 发布:2024-10-07 01:55:54 浏览:517
java数据库date 发布:2024-10-07 01:55:21 浏览:458
安卓12如何开通运用权限 发布:2024-10-07 01:29:54 浏览:134
电脑显示已连接图形服务器 发布:2024-10-07 01:24:38 浏览:797
如何恢复手机服务器的时速 发布:2024-10-07 01:22:30 浏览:749
c语言六套 发布:2024-10-07 01:22:26 浏览:383
安卓手机系统文件存在哪里 发布:2024-10-07 01:21:30 浏览:898
编译原理文字题 发布:2024-10-07 00:53:58 浏览:332