好人卡的 发表于 2007-6-10 06:40:51

Zelsazgh 发表于 2007-6-10 07:21:43

主要是因为midp2.0仍不支持浮点数,所以在math下只有abs,max,min三个函数,还是用第三方类吧,或者用定值法,实际上你可以察看MIDP的API文档,都有详细列表的,一查就清清楚楚。

好人卡的 发表于 2007-6-11 19:01:13

duzhi5368 发表于 2007-6-11 20:31:04

CLDC1.0确实不支持浮点数
但是SIN我们可以自己使用查表法模拟实现.
// 0, 10, 20, 30, 40, 50, 60, 70, 80, 90角度的sin值 ,全部乘以256得到的一个对应表数组
    private static final int[] SINES =
      { 0, 44, 88, 128, 165, 196, 222, 241, 252, 256 };


    // angle是实际角度除以10,所以90度的angle就为9,360度全圆的angle就是36
    private static int sineTimes256(int angle)
    {
      angle %= 36;    // 360度以上
      if (angle <= 9)          // 0到90度
      {
            return SINES;
      }
      else if (angle <= 18)    // 90到180度
      {
            return SINES;
      }
      else if (angle <= 27)    // 180到270度
      {
            return -SINES;
      }
      else                     // 270到360度      {
            return -SINES;
      }
    }


    // angle是实际角度除以10,所以90度的angle就为9,360度全圆的angle就是36
    private static int cosineTimes256(int angle)
    {
      return sineTimes256(angle + 9);   
    }


之后只要调用sineTimes256和cosineTimes256函数就OK了,参数传角度的1/10
但这仅仅是模拟运算,求值是不精确的,效率比较高.
当然,你可以考虑使用更详细的表,当然会牺牲一些效率.

好人卡的 发表于 2007-6-12 00:47:09

duzhi5368 发表于 2007-6-12 16:26:11

上帝给了我们手和脑,就是让我们去创造.没有平方根函数的话,继续自己写咯~
private final int sqrt(int n)
{
    int r, l, t;
    // 100以内数字求平方根
    if (n < 100)
    {
      r = 9;
      while (n < r * r)
      {
      r--;
      }
    }
    else {
    // 大于100的数
      r = sqrt(n / 100);
      l = n - r * r * 100;
      t = l / (r * 20);
      while (t * (r * 20 + t) > l) t--;
      r = r * 10 + t;
    }
    return r;
}


Zelsazgh 发表于 2007-6-12 17:11:45

唉呀呀......又被抢先了.....

Zelsazgh 发表于 2007-6-12 17:32:57

不得不说.真配服duzhi3658我想的算法的复杂度太高了....而且结果也不精确.....配服配服.....
我的想法是先转成STRING类....按两位进行存储.....最后在手动开方方法来解决....唉....突然发现算法效率不高....

好人卡的 发表于 2007-6-13 08:28:20

duzhi5368 发表于 2007-6-13 16:07:55

引用第8楼好人卡的神话于2007-06-13 00:28发表的:


这个有点Orz了。。。还是避免使用平方根好了。其实sin cos的那个把1-90的全部都算出来存住就精确多了。


放大10000倍后的SIN,COS数组

public   static   int   SIN[]   =   {   
                                                            0,   174,   348,   523,   697,   871,   1045,   1218,   1391,   
                                                            1564,   1736,   
                                                            1908,   2079,   2249,   2419,   2588,   2756,   2923,   3090,   
                                                            3255,   3420,   
                                                            3583,   3746,   3907,   4067,   4226,   4383,   4539,   4694,   
                                                            4848,   4999,   
                                                            5150,   5299,   5446,   5591,   5735,   5877,   6018,   6156,   
                                                            6293,   6427,   
                                                            6560,   6691,   6819,   6946,   7071,   7193,   7313,   7431,   
                                                            7547,   7660,   
                                                            7771,   7880,   7986,   8090,   8191,   8290,   8386,   8480,   
                                                            8571,   8660,   
                                                            8746,   8829,   8910,   8987,   9063,   9135,   9205,   9271,   
                                                            9335,   9396,   
                                                            9455,   9510,   9563,   9612,   9659,   9702,   9743,   9781,   
                                                            9816,   9848,   
                                                            9876,   9902,   9925,   9945,   9961,   9975,   9986,   9993,   
                                                            9998,   10000,   
                                                            9998,   9993,   9986,   9975,   9961,   9945,   9925,   9902,   
                                                            9876,   9848,   
                                                            9816,   9781,   9743,   9702,   9659,   9612,   9563,   9510,   
                                                            9455,   9396,   
                                                            9335,   9271,   9205,   9135,   9063,   8987,   8910,   8829,   
                                                            8746,   8660,   
                                                            8571,   8480,   8386,   8290,   8191,   8090,   7986,   7880,   
                                                            7771,   7660,   
                                                            7547,   7431,   7313,   7193,   7071,   6946,   6819,   6691,   
                                                            6560,   6427,   
                                                            6293,   6156,   6018,   5877,   5735,   5591,   5446,   5299,   
                                                            5150,   4999,   
                                                            4848,   4694,   4539,   4383,   4226,   4067,   3907,   3746,   
                                                            3583,   3420,   
                                                            3255,   3090,   2923,   2756,   2588,   2419,   2249,   2079,   
                                                            1908,   1736,   
                                                            1564,   1391,   1218,   1045,   871,   697,   523,   348,   174,   
                                                            0,   
                                                            -174,   -348,   -523,   -697,   -871,   -1045,   -1218,   -1391,   
                                                            -1564,   -1736,   
                                                            -1908,   -2079,   -2249,   -2419,   -2588,   -2756,   -2923,   
                                                            -3090,   -3255,   -3420,   
                                                            -3583,   -3746,   -3907,   -4067,   -4226,   -4383,   -4539,   
                                                            -4694,   -4848,   -5000,   
                                                            -5150,   -5299,   -5446,   -5591,   -5735,   -5877,   -6018,   
                                                            -6156,   -6293,   -6427,   
                                                            -6560,   -6691,   -6819,   -6946,   -7071,   -7193,   -7313,   
                                                            -7431,   -7547,   -7660,   
                                                            -7771,   -7880,   -7986,   -8090,   -8191,   -8290,   -8386,   
                                                            -8480,   -8571,   -8660,   
                                                            -8746,   -8829,   -8910,   -8987,   -9063,   -9135,   -9205,   
                                                            -9271,   -9335,   -9396,   
                                                            -9455,   -9510,   -9563,   -9612,   -9659,   -9702,   -9743,   
                                                            -9781,   -9816,   -9848,   
                                                            -9876,   -9902,   -9925,   -9945,   -9961,   -9975,   -9986,   
                                                            -9993,   -9998,   -10000,   
                                                            -9998,   -9993,   -9986,   -9975,   -9961,   -9945,   -9925,   
                                                            -9902,   -9876,   -9848,   
                                                            -9816,   -9781,   -9743,   -9702,   -9659,   -9612,   -9563,   
                                                            -9510,   -9455,   -9396,   
                                                            -9335,   -9271,   -9205,   -9135,   -9063,   -8987,   -8910,   
                                                            -8829,   -8746,   -8660,   
                                                            -8571,   -8480,   -8386,   -8290,   -8191,   -8090,   -7986,   
                                                            -7880,   -7771,   -7660,   
                                                            -7547,   -7431,   -7313,   -7193,   -7071,   -6946,   -6819,   
                                                            -6691,   -6560,   -6427,   
                                                            -6293,   -6156,   -6018,   -5877,   -5735,   -5591,   -5446,   
                                                            -5299,   -5150,   -5000,   
                                                            -4848,   -4694,   -4539,   -4383,   -4226,   -4067,   -3907,   
                                                            -3746,   -3583,   -3420,   
                                                            -3255,   -3090,   -2923,   -2756,   -2588,   -2419,   -2249,   
                                                            -2079,   -1908,   -1736,   
                                                            -1564,   -1391,   -1218,   -1045,   -871,   -697,   -523,   
                                                            -348,   -174};   


public   static   int   COS[]   =   {   
                                                            10000,   9998,   9993,   9986,   9975,   9961,   9945,   9925,   
                                                            9902,   9876,   9848,   
                                                            9816,   9781,   9743,   9702,   9659,   9612,   9563,   9510,   
                                                            9455,   9396,   
                                                            9335,   9271,   9205,   9135,   9063,   8987,   8910,   8829,   
                                                            8746,   8660,   
                                                            8571,   8480,   8386,   8290,   8191,   8090,   7986,   7880,   
                                                            7771,   7660,   
                                                            7547,   7431,   7313,   7193,   7071,   6946,   6819,   6691,   
                                                            6560,   6427,   
                                                            6293,   6156,   6018,   5877,   5735,   5591,   5446,   5299,   
                                                            5150,   5000,   
                                                            4848,   4694,   4539,   4383,   4226,   4067,   3907,   3746,   
                                                            3583,   3420,   
                                                            3255,   3090,   2923,   2756,   2588,   2419,   2249,   2079,   
                                                            1908,   1736,   
                                                            1564,   1391,   1218,   1045,   871,   697,   523,   348,   174,   
                                                            0,   
                                                            -174,   -348,   -523,   -697,   -871,   -1045,   -1218,   -1391,   
                                                            -1564,   -1736,   
                                                            -1908,   -2079,   -2249,   -2419,   -2588,   -2756,   -2923,   
                                                            -3090,   -3255,   -3420,   
                                                            -3583,   -3746,   -3907,   -4067,   -4226,   -4383,   -4539,   
                                                            -4694,   -4848,   -4999,   
                                                            -5150,   -5299,   -5446,   -5591,   -5735,   -5877,   -6018,   
                                                            -6156,   -6293,   -6427,   
                                                            -6560,   -6691,   -6819,   -6946,   -7071,   -7193,   -7313,   
                                                            -7431,   -7547,   -7660,   
                                                            -7771,   -7880,   -7986,   -8090,   -8191,   -8290,   -8386,   
                                                            -8480,   -8571,   -8660,   
                                                            -8746,   -8829,   -8910,   -8987,   -9063,   -9135,   -9205,   
                                                            -9271,   -9335,   -9396,   
                                                            -9455,   -9510,   -9563,   -9612,   -9659,   -9702,   -9743,   
                                                            -9781,   -9816,   -9848,   
                                                            -9876,   -9902,   -9925,   -9945,   -9961,   -9975,   -9986,   
                                                            -9993,   -9998,   -10000,   
                                                            -9998,   -9993,   -9986,   -9975,   -9961,   -9945,   -9925,   
                                                            -9902,   -9876,   -9848,   
                                                            -9816,   -9781,   -9743,   -9702,   -9659,   -9612,   -9563,   
                                                            -9510,   -9455,   -9396,   
                                                            -9335,   -9271,   -9205,   -9135,   -9063,   -8987,   -8910,   
                                                            -8829,   -8746,   -8660,   
                                                            -8571,   -8480,   -8386,   -8290,   -8191,   -8090,   -7986,   
                                                            -7880,   -7771,   -7660,   
                                                            -7547,   -7431,   -7313,   -7193,   -7071,   -6946,   -6819,   
                                                            -6691,   -6560,   -6427,   
                                                            -6293,   -6156,   -6018,   -5877,   -5735,   -5591,   -5446,   
                                                            -5299,   -5150,   -5000,   
                                                            -4848,   -4694,   -4539,   -4383,   -4226,   -4067,   -3907,   
                                                            -3746,   -3583,   -3420,   
                                                            -3255,   -3090,   -2923,   -2756,   -2588,   -2419,   -2249,   
                                                            -2079,   -1908,   -1736,   
                                                            -1564,   -1391,   -1218,   -1045,   -871,   -697,   -523,   
                                                            -348,   -174,   0,   
                                                            174,   348,   523,   697,   871,   1045,   1218,   1391,   1564,   
                                                            1736,   
                                                            1908,   2079,   2249,   2419,   2588,   2756,   2923,   3090,   
                                                            3255,   3420,   
                                                            3583,   3746,   3907,   4067,   4226,   4383,   4539,   4694,   
                                                            4848,   5000,   
                                                            5150,   5299,   5446,   5591,   5735,   5877,   6018,   6156,   
                                                            6293,   6427,   
                                                            6560,   6691,   6819,   6946,   7071,   7193,   7313,   7431,   
                                                            7547,   7660,   
                                                            7771,   7880,   7986,   8090,   8191,   8290,   8386,   8480,   
                                                            8571,   8660,   
                                                            8746,   8829,   8910,   8987,   9063,   9135,   9205,   9271,   
                                                            9335,   9396,   
                                                            9455,   9510,   9563,   9612,   9659,   9702,   9743,   9781,   
                                                            9816,   9848,   
                                                            9876,   9902,   9925,   9945,   9961,   9975,   9986,   9993,   
                                                            9998};   
   

值得注意的是,这俩数组占用内存为2.8K.恩,若是手机平台,真的要悠着点用
页: [1] 2
查看完整版本: [求助]J2ME支持Math class的问题。。。