看此文前,你可以首先参考一下《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的使用和大多数提供源代码的第三方库一样,只要直接将其加入到你的工程中来就可以了。
对CLDC1.1的扩展
henson.midp.Float11 是对CLDC1.1的扩展。提供了CLDC1.1相对比J2SE缺失的浮点操作:
Non-static members |
Static members |
Constants |
double asin(double x) |
double SQRT3 - Square root from 3 |
下载地址: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/,感兴趣的朋友可以自行研究。