当前位置: 首页 > news >正文

henson.midp.Float浮点类介绍

作者:favoyang 文章来源:http://www.j2medev.com/Article/ShowArticle.asp?ArticleID=864

看此文前,你可以首先参考一下《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

机型sin, ms
100次
cos, ms
100 次
tan, ms
100 次
add, ms
10000 次
mul, ms
10000 次
div, ms
10000 次
sqrt, ms
1000 次
移动电话

/-\ Nokia

N-Gage101659416411297343863284219
6310i4370246170895363146732413120402
3510i4202243568375324145502237016678
61004407253470655410149052379416069
66104381251171585492150562387417318
3650109460917661297348470314641
76507654531265103125155328*
660032815750018854732351328
622060863623101498325223953223823670
7600494290795614157824821622
310067273967109499054249053629126268
6230 (3.14)9655381654108832125165*
6230 (4.28)7054141197857238736692378
6230i (3.23)627351994619174738131830
72504254243170525466149432248314524
761028114143818745327191109
626028114140615745327661187
663011063156942031094500

/-\ Siemens

S5528899165595089936306101370200670169181
M5530441170255358438420105500207800*
SX1111067218751563398571414203
CX658442583423274431219923
S65 2121393372454661191798
M75 (new)2671533092404201186790

/-\ SonyEricsson

K300i (new)7393541094646171630412389
K750i654319980521149628481970
Z10107854041231886202632892603
K700i7123701085639168730491864
T61020580115753358528100713658774076280
T610 (R3C)878050551451511385304404212034595
T610 (R6C)987555751621012235332954941037920
P90025010934415640622031062
P800500282813625156332501750
Thank you to Dmitry Gorilowsky for measurements
PDA

/-\ Sony

Clie N61048830249608477035810102100445530206440

辅助工具: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/,感兴趣的朋友可以自行研究。

相关文章:

  • 深入学习之css三角形
  • J2ME中的字符串管理和多语言支持
  • 深入学习之图片延迟加载
  • 深入学习之加载机制
  • 封装MathFP和FloatBox
  • 深入学习之事件兼容2 以及二级事件
  • 看了网友Roy的评论,研究了一下用filter来解决Struts中文乱码的问题!
  • 深入学习之h5 以及媒体查询
  • 保护自己的MIDlet程序之二:TimeProtector
  • 深入学习之动画
  • 保护自己的MIDlet程序之三:SNProtector
  • 深入学习之前端递归应用
  • 深入学习之浅拷贝
  • 保护自己的MIDlet程序
  • 深入学习之非关系数据库
  • JS 中的深拷贝与浅拷贝
  • AWS实战 - 利用IAM对S3做访问控制
  • Javascript弹出层-初探
  • JS字符串转数字方法总结
  • react 代码优化(一) ——事件处理
  • ReactNative开发常用的三方模块
  • React-redux的原理以及使用
  • SpiderData 2019年2月23日 DApp数据排行榜
  • vue中实现单选
  • webpack入门学习手记(二)
  • 基于游标的分页接口实现
  • 一份游戏开发学习路线
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • # 数据结构
  • (C语言)fgets与fputs函数详解
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (二)pulsar安装在独立的docker中,python测试
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (十六)Flask之蓝图
  • (转)Google的Objective-C编码规范
  • (转)ObjectiveC 深浅拷贝学习
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .a文件和.so文件
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .net core Swagger 过滤部分Api
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • [.net]官方水晶报表的使用以演示下载
  • []指针
  • [ActionScript][AS3]小小笔记
  • [Android Studio] 开发Java 程序
  • [C#]获取指定文件夹下的所有文件名(递归)
  • [C++][数据结构][算法]单链式结构的深拷贝
  • [emacs] CUA的矩形块操作很给力啊
  • [HDU3710]Battle over Cities