看此文前,你可以首先参考一下《J2ME中定点库MathFP使用入门》一文。MathFP是一个定点的浮点模拟工具,这套类库没有封装细节,而是把一系列的转换操作留给了用户,这些频繁的操作非常容易出错,但是效率上占一定的优势。考虑到极少有J2ME设备设有浮点运算单元,特别是在CLDC1.0设备上不适合使用沉重的浮点运算。所以如果你的应用需要进行沉重的浮点运算,比如基于浮点的游戏,可以采用MathFP。这样至少比你采用手动的乘除法来的优雅。而对于并非沉重的浮点计算,我推荐大家使用由_Nikolay Klimchuk_ 开发的henson.midp.Float库(ver 1.01) ,一个封装良好的Float类。无线论坛[http://www.j2me.com.cn/bbs] 无线论坛[http://www.j2me.com.cn/bbs] henson.midp.Float类简介无线论坛[http://www.j2me.com.cn/bbs] 首先到http://henson.newmail.ru/j2me/Float.java下载源代码。无线论坛[http://www.j2me.com.cn/bbs] 无线论坛[http://www.j2me.com.cn/bbs] henson.midp.Float类非常适合科学计算,他的范围很大,具有64位的尾数(mantissa),64位的指数。该Float类和J2SE标准的Float类十分的相似,提供了完备的方法,参考下表:无线论坛[http://www.j2me.com.cn/bbs] 无线论坛[http://www.j2me.com.cn/bbs] 非静态成员 非静态成员 常量 无线论坛[http://www.j2me.com.cn/bbs] Float()无线论坛[http://www.j2me.com.cn/bbs] Float(long value)无线论坛[http://www.j2me.com.cn/bbs] Float(long value, long e)无线论坛[http://www.j2me.com.cn/bbs] Float(Float value)无线论坛[http://www.j2me.com.cn/bbs] String toString()无线论坛[http://www.j2me.com.cn/bbs] Float Add(Float value)无线论坛[http://www.j2me.com.cn/bbs] Float Sub(Float value)无线论坛[http://www.j2me.com.cn/bbs] Float Mul(long value)无线论坛[http://www.j2me.com.cn/bbs] Float Mul(Float value)无线论坛[http://www.j2me.com.cn/bbs] Float Div(long value)无线论坛[http://www.j2me.com.cn/bbs] Float Div(Float value)无线论坛[http://www.j2me.com.cn/bbs] boolean Great(Float x)无线论坛[http://www.j2me.com.cn/bbs] boolean Less(Float x)无线论坛[http://www.j2me.com.cn/bbs] boolean Equal(Float x)无线论坛[http://www.j2me.com.cn/bbs] Float Neg()无线论坛[http://www.j2me.com.cn/bbs] long toLong()无线论坛[http://www.j2me.com.cn/bbs] boolean isError() Float sin(Float x)无线论坛[http://www.j2me.com.cn/bbs] Float cos(Float x)无线论坛[http://www.j2me.com.cn/bbs] Float sqrt(Float x)无线论坛[http://www.j2me.com.cn/bbs] Float tan(Float x)无线论坛[http://www.j2me.com.cn/bbs] Float asin(Float x)无线论坛[http://www.j2me.com.cn/bbs] Float acos(Float x)无线论坛[http://www.j2me.com.cn/bbs] Float atan(Float x)无线论坛[http://www.j2me.com.cn/bbs] Float atan2(Float x, Float y)无线论坛[http://www.j2me.com.cn/bbs] Float parse(String str, int radix)无线论坛[http://www.j2me.com.cn/bbs] Float exp(Float x)无线论坛[http://www.j2me.com.cn/bbs] Float log(Float x)无线论坛[http://www.j2me.com.cn/bbs] Float log10(Float x)无线论坛[http://www.j2me.com.cn/bbs] Float pow(Float x, Float y)无线论坛[http://www.j2me.com.cn/bbs] Float ceil(Float x)无线论坛[http://www.j2me.com.cn/bbs] Float floor(Float x)无线论坛[http://www.j2me.com.cn/bbs] Float abs(Float x)无线论坛[http://www.j2me.com.cn/bbs] Float Int(Float x)无线论坛[http://www.j2me.com.cn/bbs] Float Frac(Float x)无线论坛[http://www.j2me.com.cn/bbs] Float toRadians(Float x)无线论坛[http://www.j2me.com.cn/bbs] Float toDegrees(Float x) Float ERROR无线论坛[http://www.j2me.com.cn/bbs] Float ZERO无线论坛[http://www.j2me.com.cn/bbs] Float ONE无线论坛[http://www.j2me.com.cn/bbs] Float PI - pi无线论坛[http://www.j2me.com.cn/bbs] Float E - Euler's constant无线论坛[http://www.j2me.com.cn/bbs] Float LOG10 - Natural logarithm of 10无线论坛[http://www.j2me.com.cn/bbs] Float LOGdiv2 - Natural logarithm of 0.5无线论坛[http://www.j2me.com.cn/bbs] Float PIdiv2 - pi/2无线论坛[http://www.j2me.com.cn/bbs] Float PIdiv4 - pi/4无线论坛[http://www.j2me.com.cn/bbs] Float PIdiv6 - pi/6无线论坛[http://www.j2me.com.cn/bbs] Float PIdiv12 - pi/12无线论坛[http://www.j2me.com.cn/bbs] Float PImul2 - pi*2无线论坛[http://www.j2me.com.cn/bbs] Float PImul4 - pi*4 无线论坛[http://www.j2me.com.cn/bbs] 无线论坛[http://www.j2me.com.cn/bbs] Float的使用和大多数提供源代码的第三方库一样,只要直接将其加入到你的工程中来就可以了。无线论坛[http://www.j2me.com.cn/bbs] 无线论坛[http://www.j2me.com.cn/bbs] Float类的license很特别,根据作者的要求,需要你做到以下几点:无线论坛[http://www.j2me.com.cn/bbs] 无线论坛[http://www.j2me.com.cn/bbs] 一个含有此Float类的你的产品的copy和以及对应的license 无线论坛[http://www.j2me.com.cn/bbs] 在about菜单中增加“henson.midp.Float (C) by Nikolay Klimchuk ”版权提示 无线论坛[http://www.j2me.com.cn/bbs] 如果有官方网站,则网站应该提供到http://henson.newmail.ru的链接 无线论坛[http://www.j2me.com.cn/bbs] 测试数据无线论坛[http://www.j2me.com.cn/bbs] 也许你最关心这个模拟类的速度。以下是官方的测试数据供你参考。无线论坛[http://www.j2me.com.cn/bbs] 无线论坛[http://www.j2me.com.cn/bbs] 测试程序下载地址:无线论坛[http://www.j2me.com.cn/bbs] 无线论坛[http://www.j2me.com.cn/bbs] http://henson.newmail.ru/j2me/FloatTest.jad 无线论坛[http://www.j2me.com.cn/bbs] 无线论坛[http://www.j2me.com.cn/bbs] 机型 sin, ms 无线论坛[http://www.j2me.com.cn/bbs] 100次 cos, ms 无线论坛[http://www.j2me.com.cn/bbs] 100 次 tan, ms 无线论坛[http://www.j2me.com.cn/bbs] 100 次 add, ms 无线论坛[http://www.j2me.com.cn/bbs] 10000 次 mul, ms 无线论坛[http://www.j2me.com.cn/bbs] 10000 次 div, ms 无线论坛[http://www.j2me.com.cn/bbs] 10000 次 sqrt, ms 无线论坛[http://www.j2me.com.cn/bbs] 1000 次 无线论坛[http://www.j2me.com.cn/bbs] 移动电话 无线论坛[http://www.j2me.com.cn/bbs] /-\ Nokia无线论坛[http://www.j2me.com.cn/bbs] 无线论坛[http://www.j2me.com.cn/bbs] N-Gage 1016 594 1641 1297 3438 6328 4219 无线论坛[http://www.j2me.com.cn/bbs] 6310i 4370 2461 7089 5363 14673 24131 20402 无线论坛[http://www.j2me.com.cn/bbs] 3510i 4202 2435 6837 5324 14550 22370 16678 无线论坛[http://www.j2me.com.cn/bbs] 6100 4407 2534 7065 5410 14905 23794 16069 无线论坛[http://www.j2me.com.cn/bbs] 6610 4381 2511 7158 5492 15056 23874 17318 无线论坛[http://www.j2me.com.cn/bbs] 3650 1094 609 1766 1297 3484 7031 4641 无线论坛[http://www.j2me.com.cn/bbs] 7650 765 453 1265 1031 2515 5328 * 无线论坛[http://www.j2me.com.cn/bbs] 6600 328 157 500 188 547 3235 1328 无线论坛[http://www.j2me.com.cn/bbs] 6220 6086 3623 10149 8325 22395 32238 23670 无线论坛[http://www.j2me.com.cn/bbs] 7600 494 290 795 614 1578 2482 1622 无线论坛[http://www.j2me.com.cn/bbs] 3100 6727 3967 10949 9054 24905 36291 26268 无线论坛[http://www.j2me.com.cn/bbs] 6230 (3.14) 965 538 1654 1088 3212 5165 * 无线论坛[http://www.j2me.com.cn/bbs] 6230 (4.28) 705 414 1197 857 2387 3669 2378 无线论坛[http://www.j2me.com.cn/bbs] 6230i (3.23) 627 351 994 619 1747 3813 1830 无线论坛[http://www.j2me.com.cn/bbs] 7250 4254 2431 7052 5466 14943 22483 14524 无线论坛[http://www.j2me.com.cn/bbs] 7610 281 141 438 187 453 2719 1109 无线论坛[http://www.j2me.com.cn/bbs] 6260 281 141 406 157 453 2766 1187 无线论坛[http://www.j2me.com.cn/bbs] 6630 110 63 156 94 203 1094 500 无线论坛[http://www.j2me.com.cn/bbs] /-\ Siemens无线论坛[http://www.j2me.com.cn/bbs] 无线论坛[http://www.j2me.com.cn/bbs] S55 28899 16559 50899 36306 101370 200670 169181 无线论坛[http://www.j2me.com.cn/bbs] M55 30441 17025 53584 38420 105500 207800 * 无线论坛[http://www.j2me.com.cn/bbs] SX1 1110 672 1875 1563 3985 7141 4203 无线论坛[http://www.j2me.com.cn/bbs] CX65 844 258 342 327 443 1219 923 无线论坛[http://www.j2me.com.cn/bbs] S65 212 139 337 245 466 1191 798 无线论坛[http://www.j2me.com.cn/bbs] M75 (new) 267 153 309 240 420 1186 790 无线论坛[http://www.j2me.com.cn/bbs] /-\ SonyEricsson无线论坛[http://www.j2me.com.cn/bbs] 无线论坛[http://www.j2me.com.cn/bbs] K300i (new) 739 354 1094 646 1716 3041 2389 无线论坛[http://www.j2me.com.cn/bbs] K750i 654 319 980 521 1496 2848 1970 无线论坛[http://www.j2me.com.cn/bbs] Z1010 785 404 1231 886 2026 3289 2603 无线论坛[http://www.j2me.com.cn/bbs] K700i 712 370 1085 639 1687 3049 1864 无线论坛[http://www.j2me.com.cn/bbs] T610 20580 11575 33585 28100 71365 87740 76280 无线论坛[http://www.j2me.com.cn/bbs] T610 (R3C) 8780 5055 14515 11385 30440 42120 34595 无线论坛[http://www.j2me.com.cn/bbs] T610 (R6C) 9875 5575 16210 12235 33295 49410 37920 无线论坛[http://www.j2me.com.cn/bbs] P900 250 109 344 156 406 2203 1062 无线论坛[http://www.j2me.com.cn/bbs] P800 500 282 813 625 1563 3250 1750 无线论坛[http://www.j2me.com.cn/bbs] Thank you to Dmitry Gorilowsky for measurements 无线论坛[http://www.j2me.com.cn/bbs] PDA 无线论坛[http://www.j2me.com.cn/bbs] /-\ Sony无线论坛[http://www.j2me.com.cn/bbs] 无线论坛[http://www.j2me.com.cn/bbs] Clie N610 48830 24960 84770 35810 102100 445530 206440 无线论坛[http://www.j2me.com.cn/bbs] 无线论坛[http://www.j2me.com.cn/bbs] 辅助工具:FloatConv (1.1) 无线论坛[http://www.j2me.com.cn/bbs] _Nikolay Klimchuk_ 还开发了一些相关工具让该Float的使用变得更加的简单。FloatConv是一个数学转换器,它将数学算数表达式转换为midp1.0平台上使用henson.midp.Float的等价表达式。这样使得使用henson.midp.Float的成本大大降低了。这一工具是基于J2SE 。 无线论坛[http://www.j2me.com.cn/bbs] 无线论坛[http://www.j2me.com.cn/bbs] 该工具的下载地址是:http://www.unteh.com/download/FloatConv/FloatConvW.zip无线论坛[http://www.j2me.com.cn/bbs] 无线论坛[http://www.j2me.com.cn/bbs] 对CLDC1.1的扩展无线论坛[http://www.j2me.com.cn/bbs] henson.midp.Float11 是对CLDC1.1的扩展。提供了CLDC1.1相对比J2SE缺失的浮点操作:无线论坛[http://www.j2me.com.cn/bbs] 无线论坛[http://www.j2me.com.cn/bbs] Non-static members Static members Constants 无线论坛[http://www.j2me.com.cn/bbs] double asin(double x)无线论坛[http://www.j2me.com.cn/bbs] double acos(double x)无线论坛[http://www.j2me.com.cn/bbs] double atan(double x)无线论坛[http://www.j2me.com.cn/bbs] double atan2(double y, double x)无线论坛[http://www.j2me.com.cn/bbs] double exp(double x)无线论坛[http://www.j2me.com.cn/bbs] double log(double x)无线论坛[http://www.j2me.com.cn/bbs] double log10(double x)无线论坛[http://www.j2me.com.cn/bbs] double pow(double x, double y) double SQRT3 - Square root from 3无线论坛[http://www.j2me.com.cn/bbs] double LOG10 - Natural logarithm of 10无线论坛[http://www.j2me.com.cn/bbs] double LOGdiv2 - Natural logarithm of 0.5无线论坛[http://www.j2me.com.cn/bbs] 无线论坛[http://www.j2me.com.cn/bbs] 无线论坛[http://www.j2me.com.cn/bbs] 下载地址:http://henson.newmail.ru/j2me/Float11.java无线论坛[http://www.j2me.com.cn/bbs] henson.midp.Float11的license和henson.midp.Float是一样的。无线论坛[http://www.j2me.com.cn/bbs] 无线论坛[http://www.j2me.com.cn/bbs] 另外一套功能相似的基于CLDC1.0的LIB是Beartronics Java J2ME Libraries的fpmathlib,地址 :http://sourceforge.net/projects/bearlib/,感兴趣的朋友可以自行研究。 |