如何解决matlab中的浮点错误

时间:2014-02-27 16:11:22

标签: matlab floating-point

我有一个问题,我有些惊讶无法找到答案。问题是关于浮点错误。它不是“为什么a == b给0”的问题,而是如果有办法修复浮点错误。我现在的代码部分是敏感的,我需要找到一种方法来解决浮点错误。我试过

round(100000*myDouble)/100000;

double(int64(100000*myDouble))/100000

但输出仍然有一些数字的浮点错误(不是所有数字,但少数足以弄乱我的代码)。问题是我在matlab中使用的函数是一个多边形限幅器,我用它来计算许多多边形的并集。该函数寻找共同点,如果存在很小的差异,这将使一切变得混乱。这个问题应该不是问题,因为它是一个联合,部分重叠的多边形不应该引起麻烦。但是由于该功能的一些问题,我需要确保没有这些重叠。在大多数情况下,该功能工作得非常好,但为了加快速度,我添加了一个带有孔的纳米分离多边形矢量,并且由于该函数不会处理这样的情况,因此有时会出现问题。

没有必要使用int64进行计算,因为函数以mex文件结束,因此无法使其适用于int64。

1 个答案:

答案 0 :(得分:1)

解决所有浮点精度问题没有一个答案。一些策略是:

  • vpa(或符号变量)的用法。
  • 使错误具有确定性。如果使用相同的公式计算两次相同的数字,结果应该相等。
  • 不要使用小数因子进行舍入。请改用2^x。在这种情况下,请尝试2^16而不是100000。这样你就可以对分数进行四舍五入并保持指数。