2013-03-24 86 views
1

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

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

这是关通过一个因子4.739 10^-3从印刷结果3.879624

的代码:

 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 
+0

你确定你的代码中的SPEED_TRANSFER [level] = 1.05和PointF.length(mSpeed.x,mSpeed.y)= 3.67736881的值吗?你有没有尝试记录它? – 2013-03-24 09:45:18

+0

@NAYOSO在日志打印中,向右滚动 – ilomambo 2013-03-24 09:47:12

+0

这是多线程的吗? 'mSpeed'在计算'speed'和你的Log线之间改变?另外,如果你将'factor'和'speed'声明为'double',它有什么区别吗? – mtrw 2013-03-24 09:48:39

回答

1

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