在一个简单的float运算中,乘法和除法有什么区别吗?
In a simple float operation, is there any difference between multiplication and division?
我想知道在简单的计算中乘法和除法之间是否存在一些差异(对于性能问题),例如:
float thing = Mouse.getDY() * 0.1f;
float otherThing = Mouse.getDY() / 10f;
当这种事情发生很多时,当然,例如在3D游戏中的相机位置计算(lwjgl)。
谢谢!
是的,您会得到不同的结果,因为 10f 可以准确表示,但 0.1f 不能。
System.out.println(0.1f * 0.1f);
System.out.println(0.1f / 10f);
打印
0.010000001
0.01
注意:使用 double
的误差要小得多,但不使用舍入也不会消失。
对于 GUI 应用程序,您不会看到差异,但它会导致计算中出现细微差异。
不仅仅是性能上的差异。 Mouse.getDY() returns int 值,所以结果也会不同。
在第一种情况下,您将得到带有小数部分的浮点数结果,在第二种情况下,它将被转换为浮点数。
即54 * 0.1f == 5.4f
但 54 / 10 == 5
从性能方面来看,浮点数乘法比除法快,但我认为在 GUI 代码中它不会产生显着差异。
我想知道在简单的计算中乘法和除法之间是否存在一些差异(对于性能问题),例如:
float thing = Mouse.getDY() * 0.1f;
float otherThing = Mouse.getDY() / 10f;
当这种事情发生很多时,当然,例如在3D游戏中的相机位置计算(lwjgl)。
谢谢!
是的,您会得到不同的结果,因为 10f 可以准确表示,但 0.1f 不能。
System.out.println(0.1f * 0.1f);
System.out.println(0.1f / 10f);
打印
0.010000001
0.01
注意:使用 double
的误差要小得多,但不使用舍入也不会消失。
对于 GUI 应用程序,您不会看到差异,但它会导致计算中出现细微差异。
不仅仅是性能上的差异。 Mouse.getDY() returns int 值,所以结果也会不同。
在第一种情况下,您将得到带有小数部分的浮点数结果,在第二种情况下,它将被转换为浮点数。
即54 * 0.1f == 5.4f
但 54 / 10 == 5
从性能方面来看,浮点数乘法比除法快,但我认为在 GUI 代码中它不会产生显着差异。