2011-05-17 61 views
0

嘿, 我有我的matlab-mex文件中的浮点问题,其中我得到的值在10 ^( - 12)到10 ^( - 13)一个'肮脏'的方法来解决它们至少在计算后将这些值设置为零,如果它们太小的话? 谢谢!C和Matlab中的浮点问题

回答

2

如果它是一个数组,你可以这样做:

small_inds = find(abs(array) < 10^-12); 
array(small_inds) = zeros(length(small_inds),1); 

(编辑追加abs()为清楚起见,感谢nimrodm)

+1

可能会更好使用abs(数组)。 此外 - 你可能想要保持相对准确而不是绝对错误,所以使用像max(array(:))* 10^-12之类的东西。 – nimrodm 2011-05-17 18:29:41

+0

是的,谢谢,这是一个相当'肮脏'的方法,或者这是真的'好'在计算中将值设置为零,这是非常小的10^-12或10^-13! – tim 2011-05-17 18:45:37

+1

我会说这取决于应用程序。如果你有一个长的ARMA滤波器,这些系数可能非常重要。 – whlteXbread 2011-05-17 18:54:33

1

不知道这是你在找什么(我想问题是你想这是在mex文件中完成,或者不),但我的诀窍是运行一个逻辑操作。说装MEX矩阵X

Xm = abs(X) > max_error; 
X = Xm .* X;