Android浮点乘法的系数为0.004739

Android浮点乘法的系数为0.004739,android,math,floating-point,floating-accuracy,Android,Math,Floating Point,Floating Accuracy,有人能给我解释一下为什么速度计算关闭了吗? 这是一个浮点计算。我在日志打印中显示(如下)所有相关因素。 根据我的手动计算器: 长度: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 = SP

有人能给我解释一下为什么速度计算关闭了吗?
这是一个浮点计算。我在日志打印中显示(如下)所有相关因素。
根据我的手动计算器:

长度: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

您能在日志行中打印更多的
SPEED\u TRANSFER[level]
数字吗?您看到的是小数点后3位的错误,但仅显示其中一个因子的2位。例如,如果
SPEED\u TRANSFER[level]==1.055
,结果是正确的(虽然我本来希望它在日志行中打印为1.06,但那是另一回事)。

您能在日志行中打印更多的
SPEED\u TRANSFER[level]
数字吗?您看到的是小数点后3位的错误,但仅显示其中一个因子的2位。例如,如果
SPEED\u TRANSFER[level]==1.055
,结果是正确的(虽然我希望它在日志行中打印为1.06,但那是另一回事)。

您确定SPEED\u TRANSFER[level]=1.05和PointF.length(mSpeed.x,mSpeed.y)的值吗=3.67736881在你的代码中?你试过记录它吗?@NAYOSO它在日志打印中,向右滚动这是多线程的吗?
mSpeed
是否在
速度的计算和日志行之间变化?此外,如果您将
系数
速度
声明为
双精度
,是否会产生差异?您能否在日志行中打印更多的
速度_传输[级别]
?您看到的是小数点后3位的错误,但仅显示其中一个因子的2位。例如,如果
SPEED\u TRANSFER[level]==1.055
,则结果是正确的(虽然我希望这会在您的日志行中打印为
1.06
,但那是另一回事)。@mtrw您是对的。速度是1.055,不知怎么的,比赛水平改变了,我没有注意到。如果您想让我将您的评论标记为答案,请将其作为答案发布。您确定代码中的SPEED_TRANSFER[level]=1.05和PointF.length(mSpeed.x,mSpeed.y)=3.67736881的值吗?您是否尝试记录它?@NAYOSO它在日志打印中,向右滚动有可能是多线程的吗?
mSpeed
是否在
速度的计算和日志行之间变化?此外,如果您将
系数
速度
声明为
双精度
,是否会产生差异?您能否在日志行中打印更多的
速度_传输[级别]
?您看到的是小数点后3位的错误,但仅显示其中一个因子的2位。例如,如果
SPEED\u TRANSFER[level]==1.055
,则结果是正确的(虽然我希望这会在您的日志行中打印为
1.06
,但那是另一回事)。@mtrw您是对的。速度是1.055,不知怎么的,比赛水平改变了,我没有注意到。如果您希望我将您的评论标记为答案,请将其作为答案发布。