情况很严峻……这是我必须解决此问题且无法离开的5天。

问题:作为产品的简单操作始终会导致错误的结果。为什么?

代码摘录:

//all vars are float
// resultVec is a vector [3]
// Rs is a vector [3]
// accelerationvalues is a vector [3]
   resultVec[0]=Rs[0]*accelerationvalues[0]+Rs[1]*accelerationvalues[1]+Rs[2]*accelerationvalues[2];

//debug to print result

Log.d("e", "("+Rs[0]+")*("+accelerationvalues[0]+")+("+Rs[1]+")*("+accelerationvalues[1]+")+("+Rs[2]+")*("+accelerationvalues[2]+")="+(resultVec[0]));


这是Log Cat的结果:

但是您可以简单地尝试这是错误的:在Google上搜索

(0.040147018)*(-0.9942854)+(0.9984244)*(-0.32688835)+(0.039202508)*(9.343558)


您会发现真实的结果是8.67678679×10-9,这与其他结果有很大的不同。在执行程序时总是会重复此错误,有时符号也会有所不同!

问题是什么?

我已经尝试了所有方法来解决它! (一些发布在下面):

You can find the full source here.


将Rs和加速度值保存在arraylist中,并在列表器之外执行计算。没有结果。
将float转换为double,没有结果。
许多其他方式


附言仅对于resultVec[0]resultVec[1]会出现此问题,而resultVec[2]可以正确计算。

最佳答案

这不是android的错,这是您设计应用程序的方式。

在普通的Java应用程序中执行此操作:

public class ArithmTest {

    public static void main(String[] args) {
        double d1 = (0.040147018)*(-0.9942854)+(0.9984244)*(-0.32688835)+(0.039202508)*(9.343558);
        System.out.println(d1);

        float f1 = 0.040147018f;
        float f2 = -0.9942854f;

        float f3 = 0.9984244f;
        float f4 = -0.32688835f;

        float f5 = 0.039202508f;
        float f6 = 9.343558f;

        System.out.println(f1*f2 + f3*f4 + f5*f6);

    }
}


如您所见,第一个与Google相同,第二个打印输出是您应用的价值。
为了解决这个问题,我认为您应该在声明的每个变量中使用double而不是float,例如:accelerationvaluesresultVec

关于java - Android(大型)无法使用浮点值产品,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8035566/

10-09 13:01