gpt4 book ai didi

java - Android(大)在浮点值产品上失败

转载 作者:行者123 更新时间:2023-12-02 00:34:59 24 4
gpt4 key购买 nike

情况很戏剧性...我必须在 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 结果: enter image description here但你可以简单地尝试一下这是错误的:在 google 上搜索

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

你会发现真正的结果是8.67678679 × 10-9,与其他结果非常不同。.这个错误总是在我执行程序时重复出现,有时区别也在于符号!

问题是什么?

我已经想尽办法解决这个问题了! (下面发布了一些):

You can find the full source here.

  1. 将 Rs 和加速度值保存在数组列表中,并在列表器外部执行计算。没有结果。
  2. 将 float 转换为 double,没有结果。
  3. 还有许多其他方式

附注此问题仅在 resultVec[0]resultVec[1] 中出现,而 resultVec[2] 计算得很好。

最佳答案

您正在将 float 相乘,一直向下累积舍入误差。使用 double 并不能解决根本问题,即二进制计算机无法准确表示十进制 float 。

阅读此内容:http://download.oracle.com/docs/cd/E19957-01/806-3568/ncg_goldberg.html了解问题的概述。

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com