Java 在J2ME中实现最高性能的浮点数据类型
我想在J2ME(MIDP2.0)程序中使用浮点数。Java 在J2ME中实现最高性能的浮点数据类型,java,java-me,types,floating-point,Java,Java Me,Types,Floating Point,我想在J2ME(MIDP2.0)程序中使用浮点数。 我不需要高精度,所以我正在考虑选择float类型 然而,在我看来,我读过一篇Java文章,其中说处理器更好地支持double,因此速度更快 我用这样的数字做了很多操作,所以性能对我来说很重要 问题是,这些数据类型中哪一种在J2ME中工作得更快?float和double之间的性能差异没有那么大 如果您非常频繁地执行这些操作,那么与float相比,float更好,而且占用的空间也更少 更新: public long sumDouble(){
我不需要高精度,所以我正在考虑选择
float
类型
然而,在我看来,我读过一篇Java文章,其中说处理器更好地支持double
,因此速度更快
我用这样的数字做了很多操作,所以性能对我来说很重要
问题是,这些数据类型中哪一种在J2ME中工作得更快?float和double之间的性能差异没有那么大 如果您非常频繁地执行这些操作,那么与float相比,float更好,而且占用的空间也更少 更新:
public long sumDouble(){
double[] arr = new double[1000];
for(int i = 0 ;i < 1000;i++){
arr[i]=new Random().nextFloat();
}
float sum = 0.0f;
long start = System.currentTimeMillis();
for(int i = 0 ;i < 1000;i++){
sum+=arr[i];
}
System.out.println(""+sum);
long end = System.currentTimeMillis();
return end - start;
}
public long sumFloat(){
double[] arr = new double[1000];
for(int i = 0 ;i < 1000;i++){
arr[i]=new Random().nextDouble();
}
double sum = 0.0f;
long start = System.currentTimeMillis();
for(int i = 0 ;i < 1000;i++){
sum+=arr[i];
}
System.out.println(""+sum);
long end = System.currentTimeMillis();
return end - start;
}
public long-sumDouble(){
double[]arr=新的double[1000];
对于(int i=0;i<1000;i++){
arr[i]=new Random().nextFloat();
}
浮动总和=0.0f;
长启动=System.currentTimeMillis();
对于(int i=0;i<1000;i++){
总和+=arr[i];
}
系统输出打印项次(“+总和);
long end=System.currentTimeMillis();
返回结束-开始;
}
公众长期储蓄存款(){
double[]arr=新的double[1000];
对于(int i=0;i<1000;i++){
arr[i]=new Random().nextDouble();
}
双和=0.0f;
长启动=System.currentTimeMillis();
对于(int i=0;i<1000;i++){
总和+=arr[i];
}
系统输出打印项次(“+总和);
long end=System.currentTimeMillis();
返回结束-开始;
}
尝试在您的真实设备中执行这些方法,以测量性能差异,这并不重要。所有性能问题的规则都是:测量它。例如,您可以使用float编写程序,测量其性能(显然是在目标平台上),执行serach&replace以加倍,再次测量性能,然后进行比较。。。在emulator中,
double
可能更好,但在实际的手机上,float
可能会赢。这就是为什么你要在目标设备上进行测量:-)我已经开发了应用程序,包括游戏,实际部署在无数不同的J2ME(JME)设备上。你认为你需要浮点数,但你可能真的不需要。你认为需要用浮点数来解决的问题很可能可以用“整数数学”来解决。你有什么证据吗?