Java Double 和 Float 数学行为异常
Java Double and Float math behaving unexpectedly
对于本应非常简单的计算,我得到了一个非常奇怪的输出。我正在尝试基于 delta 平滑地移动相机。如果您查看下面的 CameraMenuAnimation(),xMove 和 cameraDT 相乘并添加到 cameraPosX。 cameraPosX 然后吐出 1.7832639E11。这没有意义?? CameraPosY 做同样的事情。
private double currentCameraTime, oldCameraTime, cameraFrameTime, cameraDT;
float cameraPosX = 1.0f;
float cameraPosY = 1.0f;
xMove = .125f;
yMove = .125f;
private void CameraMenuAnimation(){
cameraPosX += (xMove * cameraDT);
cameraPosY += (yMove * cameraDT);
GameCamera.setCameraPos(cameraPosX, cameraPosY);
System.out.println("xMove: " + xMove + " cameraDT: " + cameraDT + " cameraPosX: "+ cameraPosX);
}
@Override
public void update() {
//some accumulator variables up here that I removed
while (accumulator >= step) {
currentCameraTime = System.currentTimeMillis();
cameraFrameTime = currentCameraTime - oldCameraTime;
cameraDT = cameraFrameTime;
CameraMenuAnimation();
oldCameraTime = currentCameraTime;
accumulator -= step;
}
它从上面的 println 语句中打印出来。完全没有意义。
System.out(8714): xMove: 0.125 cameraDT: 31.0 cameraPosX: 1.7832639E11
很难说,因为你没有给出完整的例子,但看起来oldCameraTime没有初始化,所以第一个cameraDT可能很大。
对于本应非常简单的计算,我得到了一个非常奇怪的输出。我正在尝试基于 delta 平滑地移动相机。如果您查看下面的 CameraMenuAnimation(),xMove 和 cameraDT 相乘并添加到 cameraPosX。 cameraPosX 然后吐出 1.7832639E11。这没有意义?? CameraPosY 做同样的事情。
private double currentCameraTime, oldCameraTime, cameraFrameTime, cameraDT;
float cameraPosX = 1.0f;
float cameraPosY = 1.0f;
xMove = .125f;
yMove = .125f;
private void CameraMenuAnimation(){
cameraPosX += (xMove * cameraDT);
cameraPosY += (yMove * cameraDT);
GameCamera.setCameraPos(cameraPosX, cameraPosY);
System.out.println("xMove: " + xMove + " cameraDT: " + cameraDT + " cameraPosX: "+ cameraPosX);
}
@Override
public void update() {
//some accumulator variables up here that I removed
while (accumulator >= step) {
currentCameraTime = System.currentTimeMillis();
cameraFrameTime = currentCameraTime - oldCameraTime;
cameraDT = cameraFrameTime;
CameraMenuAnimation();
oldCameraTime = currentCameraTime;
accumulator -= step;
}
它从上面的 println 语句中打印出来。完全没有意义。
System.out(8714): xMove: 0.125 cameraDT: 31.0 cameraPosX: 1.7832639E11
很难说,因为你没有给出完整的例子,但看起来oldCameraTime没有初始化,所以第一个cameraDT可能很大。