Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java/Android数学测试:对Int和Float数学/转换/转换感到好奇_Java_Android_Math_Floating Point_Int - Fatal编程技术网

Java/Android数学测试:对Int和Float数学/转换/转换感到好奇

Java/Android数学测试:对Int和Float数学/转换/转换感到好奇,java,android,math,floating-point,int,Java,Android,Math,Floating Point,Int,正在查看一些不同的线程,以获取关于不同类型的数学以及int和float数据类型之间的转换的信息。长话短说,我厌倦了在没有任何测试支持的情况下读每个人的话。因此,我提供了相反的结果,在这里我为一个android应用程序编写了一个小测试,该应用程序实际上运行在一个活动中,该活动具有持续的活动动画(在我看来更真实,至少对于游戏开发者而言)。我想稍微了解一下这个抽象,下面是运行版本2.2.2的Droid的代码和LogCat结果: 结果: NumberOfLoops = 100,000 LogCat: 0

正在查看一些不同的线程,以获取关于不同类型的数学以及int和float数据类型之间的转换的信息。长话短说,我厌倦了在没有任何测试支持的情况下读每个人的话。因此,我提供了相反的结果,在这里我为一个android应用程序编写了一个小测试,该应用程序实际上运行在一个活动中,该活动具有持续的活动动画(在我看来更真实,至少对于游戏开发者而言)。我想稍微了解一下这个抽象,下面是运行版本2.2.2的Droid的代码和LogCat结果:

结果

NumberOfLoops = 100,000
LogCat:
06-28 00:17:40.439: DEBUG/MATH.TEST(3417):    i=Math.Round(f): 83ms
06-28 00:17:40.439: DEBUG/MATH.TEST(3417):           i=(int)f: 4ms
06-28 00:17:40.439: DEBUG/MATH.TEST(3417):            f=6666f: 2ms
06-28 00:17:40.439: DEBUG/MATH.TEST(3417):      f=(float)6666: 3ms
06-28 00:17:40.439: DEBUG/MATH.TEST(3417):       int division: 5ms
06-28 00:17:40.439: DEBUG/MATH.TEST(3417):     float division: 10ms
06-28 00:17:40.439: DEBUG/MATH.TEST(3417): int/float division: 14ms
-----------------------------------------------------------------------
06-28 00:18:03.017: DEBUG/MATH.TEST(3417):    i=Math.Round(f): 102ms
06-28 00:18:03.017: DEBUG/MATH.TEST(3417):           i=(int)f: 3ms
06-28 00:18:03.017: DEBUG/MATH.TEST(3417):            f=6666f: 2ms
06-28 00:18:03.017: DEBUG/MATH.TEST(3417):      f=(float)6666: 2ms
06-28 00:18:03.017: DEBUG/MATH.TEST(3417):       int division: 5ms
06-28 00:18:03.017: DEBUG/MATH.TEST(3417):     float division: 9ms
06-28 00:18:03.017: DEBUG/MATH.TEST(3417): int/float division: 13ms
-----------------------------------------------------------------------
06-28 00:18:04.915: DEBUG/MATH.TEST(3417):    i=Math.Round(f): 97ms
06-28 00:18:04.915: DEBUG/MATH.TEST(3417):           i=(int)f: 2ms
06-28 00:18:04.915: DEBUG/MATH.TEST(3417):            f=6666f: 2ms
06-28 00:18:04.915: DEBUG/MATH.TEST(3417):      f=(float)6666: 2ms
06-28 00:18:04.915: DEBUG/MATH.TEST(3417):       int division: 5ms
06-28 00:18:04.915: DEBUG/MATH.TEST(3417):     float division: 9ms
06-28 00:18:04.923: DEBUG/MATH.TEST(3417): int/float division: 13ms

NumberOfLoops = 1,000,0000
LogCat:
06-28 00:20:09.993: DEBUG/MATH.TEST(3454):    i=Math.Round(f): 7569ms
06-28 00:20:09.993: DEBUG/MATH.TEST(3454):           i=(int)f: 236ms
06-28 00:20:09.993: DEBUG/MATH.TEST(3454):            f=6666f: 223ms
06-28 00:20:09.993: DEBUG/MATH.TEST(3454):      f=(float)6666: 209ms
06-28 00:20:09.993: DEBUG/MATH.TEST(3454):       int division: 474ms
06-28 00:20:09.993: DEBUG/MATH.TEST(3454):     float division: 907ms
06-28 00:20:09.993: DEBUG/MATH.TEST(3454): int/float division: 1332ms
-----------------------------------------------------------------------
06-28 00:20:34.087: DEBUG/MATH.TEST(3454):    i=Math.Round(f): 7533ms
06-28 00:20:34.087: DEBUG/MATH.TEST(3454):           i=(int)f: 235ms
06-28 00:20:34.087: DEBUG/MATH.TEST(3454):            f=6666f: 201ms
06-28 00:20:34.087: DEBUG/MATH.TEST(3454):      f=(float)6666: 201ms
06-28 00:20:34.095: DEBUG/MATH.TEST(3454):       int division: 470ms
06-28 00:20:34.095: DEBUG/MATH.TEST(3454):     float division: 912ms
06-28 00:20:34.095: DEBUG/MATH.TEST(3454): int/float division: 1325ms
-----------------------------------------------------------------------
06-28 00:21:08.876: DEBUG/MATH.TEST(3454):    i=Math.Round(f): 7527ms
06-28 00:21:08.876: DEBUG/MATH.TEST(3454):           i=(int)f: 235ms
06-28 00:21:08.876: DEBUG/MATH.TEST(3454):            f=6666f: 208ms
06-28 00:21:08.876: DEBUG/MATH.TEST(3454):      f=(float)6666: 201ms
06-28 00:21:08.884: DEBUG/MATH.TEST(3454):       int division: 469ms
06-28 00:21:08.884: DEBUG/MATH.TEST(3454):     float division: 905ms
06-28 00:21:08.884: DEBUG/MATH.TEST(3454): int/float division: 1333ms
代码:

long mathRoundTime=0L;
长浇铸时间=0升;
长使用时间=0升;
长浇铸浮动时间=0L;
长整数时间=0L;
长时间=0升;
长混合MathTime=0L;
长mTimerDelta=0升;
长mTimerFinish=0L;
最终整数最大周期=10000000;
int x=0;
int-iTest=0;
int i1=6666;
int i2=2;
浮点数fTest=0f;
浮球f1=6666f;
浮动f2=2f;
//测试int-Math.round-float
long mTimerStart=System.currentTimeMillis();

对于(x=0;x这对我来说有点滑稽。您的简单示例的计时如下:

for (x=0;x<maxCycles;x++){
    iTest = (int)(fTest);
}

for(x=0;x这对我来说有点滑稽。您的简单示例的计时如下:

for (x=0;x<maxCycles;x++){
    iTest = (int)(fTest);
}

for(x=0;x这些肯定是一些非常有趣的发现。但我怀疑JVM是否优化了循环。看看代码是否得到扩展会很有趣。(循环扩展曾经是一种优化技术,当时C仍然很流行,每个CPU时钟都计数)

e、 g

final int cycles=maxCycles/100

对于(x=0;x这些肯定是一些非常有趣的发现。但是我怀疑JVM是否优化了循环。看看代码是否得到了扩展会很有趣。(循环扩展曾经是一种优化技术,当时C仍然很流行,每个CPU时钟都计数)

e、 g

final int cycles=maxCycles/100

对于(x=0;席)建议使用<代码>系统.NeimTime[(或)代码>以执行定时。它应该返回最精确的值。这是否是社区wiki?如果没有,请让我知道。正如Mikola所说的,这可能是由于JVM。+ 1使它成为wiki。这里没有问题。我建议您使用<代码> Stase.NavaTime.()
用于性能计时。它应该返回最精确的值。这应该是一个社区wiki吗?如果是的话,请告诉我。正如@Mikola所说,这可能是由于JVM造成的。+1使其成为wiki。这里没有问题。我明天绝对会尝试,并将结果发回。但我不在乎实际发生了什么在一开始,我只是想为这些任务提供一些简单的基准测试。它们实在太长了,无法迭代100000次和100000000次?就像我说的,这一切都是在视图中有恒定的动画和按钮的情况下完成的。我试着做一些事情,而不仅仅是手机坐在那里做数学运算来做数学h、 @While-E:对。我认为可能发生的事情是,它将类型转换移到了循环之外,唯一需要衡量的是作业。我明天绝对会尝试,并将结果发回。然而,我并不关心一开始到底发生了什么,我只是想要一些简单的任务基准,比如这些。它们真的太长了,无法迭代100000次和100000000次?就像我说的,这些都是在视图中有一个恒定的动画和按钮的情况下完成的。我试着做一些事情,而不仅仅是手机坐在那里做数学运算来做数学。@while-E:对。我认为可能发生的事情是它移动了循环外部的类型转换,唯一需要测量的是赋值。
final int cycles = maxCycles / 100
for (x=0;x<cycles;x++){
    fTest = 6666f;
    fTest = 6666f;
... 100 times ...
    fTest = 6666f;
    fTest = 6666f;
}