首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android (大型)在浮点值产品上失败

Android (大型)在浮点值产品上失败
EN

Stack Overflow用户
提问于 2011-11-07 11:04:28
回答 4查看 1.8K关注 0票数 0

情况很戏剧化..。我必须解决这个问题,已经5天了,我出不去了。

问题是:简单的产品操作总是会产生错误的结果。为什么?

守则摘录:

代码语言:javascript
运行
复制
//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上搜索

代码语言:javascript
运行
复制
(0.040147018)*(-0.9942854)+(0.9984244)*(-0.32688835)+(0.039202508)*(9.343558)

您会发现,真正的结果是8.67678679×10-9,这与other..This的错误是重复的,总是我执行程序,有时也有差异!

有什么问题吗?

我一直在努力解决这个问题!(其中一些张贴在下面):

You can find the full source here.

  1. 将Rs和加速度值保存在数组中,并在列表之外执行计算。没有result.
  2. Convert浮动到双倍,没有结果。
  3. 许多其他方法

这个问题只适用于resultVec[0]resultVec[1],而resultVec[2]则计算得很好。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-11-07 17:02:42

这不是android的错,而是你设计这个应用的方式。

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

代码语言:javascript
运行
复制
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);

    }
}

正如你所看到的,第一个和谷歌一样,第二个打印输出是你的应用的价值。要解决这个问题,我认为您应该在声明的每个变量中使用double而不是float,例如:accelerationvaluesresultVec

票数 1
EN

Stack Overflow用户

发布于 2011-11-07 11:12:55

你在把浮点数乘以,一直累积舍入误差。使用双精度并不能解决根本的问题,即二进制计算机不能准确地表示十进制浮点数。

请阅读以下文章:http://download.oracle.com/docs/cd/E19957-01/806-3568/ncg_goldberg.html以了解问题的概况。

您可能会发现需要使用BigDecimal类执行计算。

票数 2
EN

Stack Overflow用户

发布于 2011-11-07 11:07:06

我认为你应该使用双类型而不是浮点数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8035566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档