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