Android float 乘以一个因子 0.004739

标签 android math floating-point floating-accuracy

谁能给我解释一下为什么 speed 计算失败了?
这是一个浮点计算。我在日志中显示(下面)打印所有涉及的因素。
根据我的手算器:

length: sqrt(3.497924^2 + (-1.134711)^2) = 3.67736881
speed: 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

最佳答案

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

关于Android float 乘以一个因子 0.004739,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15596820/

相关文章:

javascript - 调整 SVG 的大小围绕其原点旋转

c - 程序中未初始化的变量将极坐标转换为笛卡尔坐标,反之亦然(C)

clojure - NumPy 和 Clojure/Java 之间的 float 差异

java - 如何更改 ImageButton 图像 onclick。我的代码不工作

java - 为什么我应该关心 Java 中捕获的异常?

php - 将数字的百分比添加到自身

lisp - 垂直对齐 float 在小数点上

android - 无法更新 Android Studio - 只能下载

android - 我怎样才能重新创建 fragment ?

math - 梯度下降算法中的delta到底是什么意思?