Matlab:大量的数字会引入错误吗?

Matlab:大量的数字会引入错误吗?,matlab,Matlab,我正在做一些时域卷积与频域乘法的测试,特别是通过将两个以10为基数的数字作为向量进行乘法,进行DFT,乘法,然后按如下方式重新组合,可以得到相同的结果: format long multiply = 527283*426715 a = [5 2 7 2 8 3]; b = [4 2 6 7 1 5]; len = length(a)+length(b) - 1; % the length of the convolution result temp = ifft(fft(a,len).*fft(

我正在做一些时域卷积与频域乘法的测试,特别是通过将两个以10为基数的数字作为向量进行乘法,进行DFT,乘法,然后按如下方式重新组合,可以得到相同的结果:

format long
multiply = 527283*426715
a = [5 2 7 2 8 3];
b = [4 2 6 7 1 5];
len = length(a)+length(b) - 1; % the length of the convolution result
temp = ifft(fft(a,len).*fft(b,len));
% add the numbers for each index up
result = 0;
for i = 1:length(temp)
    result = result + temp(i)*10^(length(temp)-i);
end
result
result == multiply

当我运行该代码时,最后得到0,这意味着这两个数字不相等。如果我将输入的数量级减少2,那么它会像应该的那样返回1。这个数字错误从何而来/可以避免吗?

如果
a
b
是浮点数,你永远不应该使用
a==b
来检查是否相等。相反,您应该将它们比较到公差
abs(a-b)
,其中
tol
可以是,例如
10e-6


这可能会让人困惑,因为您将
乘法声明为两个整数的乘积,然而在Matlab中,一切都是双精度的,除非明确指定。

浮点运算有一个精度,并且不会返回完美的结果:因此基本上,数字大于保持浮点的精度将有一些错误