广交好友~~ 想要讨论的可以留下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:

 

评分:0

我来说两句

Open Toolbar