广交好友~~ 想要讨论的可以留下msn~~~
希望群友网友经常能提出问题,一起解决,共同提高
J2ME中平方根算法
上一篇 /
下一篇 2010-04-27 18:54:57
/ 个人分类:Java&C
J2ME中平方根算法
J2ME中,确切的是CLDC1.0/MIDP1.0乃至CLDC1.1/MIDP2.0中,没有开平方的函数(在J2SE中是通过
java.lang.Math.sqrt()方法实现的)。但是在游戏数值平衡中,开平方是一个很基本的方式。
在一次项目会议上,组员提出如何实现开方,我没加思索,提出采用逆向逼近法。但后来考虑这样的性能很低,在
手机上如此宝贵的CPU资源不能就这样浪费了!于是考虑到采用实现手算开方法。
在构思流程时突然意识到,同样算法在二进制下应该是可用的!经过验证,有了以下代码:
public satic long sqrt(long x) {
long y = 0;
long b = (~Long.MAX_VALUE) >>> 1;
while (b > 0) {
if (x >= y + b) {
x -= y + b;
y >>= 1;
y += b;
} else {
y >>= 1;
}
b >>= 2;
}
return y;
}
//二进制手算开方法
收藏
举报
TAG: