我有一个问题,我有些惊讶无法找到答案。问题是关于浮点错误。它不是“为什么a == b给0”的问题,而是如果有办法修复浮点错误。我现在的代码部分是敏感的,我需要找到一种方法来解决浮点错误。我试过
round(100000*myDouble)/100000;
和
double(int64(100000*myDouble))/100000
但输出仍然有一些数字的浮点错误(不是所有数字,但少数足以弄乱我的代码)。问题是我在matlab中使用的函数是一个多边形限幅器,我用它来计算许多多边形的并集。该函数寻找共同点,如果存在很小的差异,这将使一切变得混乱。这个问题应该不是问题,因为它是一个联合,部分重叠的多边形不应该引起麻烦。但是由于该功能的一些问题,我需要确保没有这些重叠。在大多数情况下,该功能工作得非常好,但为了加快速度,我添加了一个带有孔的纳米分离多边形矢量,并且由于该函数不会处理这样的情况,因此有时会出现问题。
没有必要使用int64进行计算,因为函数以mex文件结束,因此无法使其适用于int64。
答案 0 :(得分:1)
解决所有浮点精度问题没有一个答案。一些策略是:
vpa
(或符号变量)的用法。2^x
。在这种情况下,请尝试2^16
而不是100000
。这样你就可以对分数进行四舍五入并保持指数。