Java Double和Float数学表现出乎意料

时间:2015-03-17 17:00:52

标签: java math

我得到一个非常奇怪的输出,应该是一个非常简单的计算。我正试图根据三角洲顺利移动相机。如果你看下面的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

1 个答案:

答案 0 :(得分:0)

很难说因为你没有给出一个完整的例子,但看起来oldCameraTime没有被初始化,所以第一个cameraDT可能非常大。