Android浮点乘以0.004739倍

时间:2013-03-24 09:18:34

标签: android math floating-point floating-accuracy

有人可以向我解释为什么speed计算已关闭吗? 这是一个浮点计算。我在日志中显示(下面)所有涉及的因素 根据我的手计算器:

  

长度:sqrt(3.497924 ^ 2 +( - 1.134711)^ 2)= 3.67736881
  速度:1.05 * 3.67736881 = 3.86123725

从打印结果 3.879624

中扣除了因子4.739 10 ^ -3

代码:

        float factor = yTouch(paddle, ballBounds);
        float speed = SPEED_TRANSFER[level] * PointF.length(mSpeed.x, mSpeed.y);
        double alpha = Math.PI/2;
        double beta = Math.atan2(mSpeed.y, mSpeed.x);
        double tau = -(2*alpha+beta);
        Log.v("debug", String.format("speed(%f) mSpeed(%f,%f) transfer(%2.2f) 
            length(%f) Original tau(%3.2f)", speed, mSpeed.x, mSpeed.y, 
            SPEED_TRANSFER[level], PointF.length(mSpeed.x, mSpeed.y), tau/Math.PI));

日志:

03-24 10:48:53.421: V/debug(3236): speed(3.879624) mSpeed(3.497924,-1.134711) transfer(1.05) length(3.677369) Original tau(-0.90)

修改
我试过这个,直接乘法是正确的。

Log.v("debug", "Direct multiplication:" + (1.05f * 3.677369f) );

03-24 11:49:08.687: V/debug(7644): Direct multiplication:3.8612373

1 个答案:

答案 0 :(得分:1)

您可以在日志行中打印更多SPEED_TRANSFER[level]的数字吗?您正在查看小数点后3位的错误,但只显示其中一个因子的2个位置。如果SPEED_TRANSFER[level] == 1.055例如结果是正确的(尽管我希望这在你的日志行中打印为1.06,但那是另一回事)。