情况很严峻……这是我必须解决此问题且无法离开的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,例如:
accelerationvalues
和resultVec
。关于java - Android(大型)无法使用浮点值产品,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8035566/