给出的答案都是正确的。我只想详细说明关于浮点测试的
gnovice’s评论。
当比较浮点数相等时,有必要使用公差值。通常使用两种类型的公差比较:绝对公差和相对公差。 (source)
a和b的绝对容差比较如下:
|a-b| < tol
相对容差比较如下:
|a-b| < tol*max(|a|,|b|) + tol_floor
你可以实现上面两个作为匿名函数:
%# absolute tolerance equality
isequalAbs = @(x,y,tol) ( abs(x-y) <= tol );
%# relative tolerance equality
isequalRel = @(x,y,tol) ( abs(x-y) <= ( tol*max(abs(x),abs(y)) + eps) );
那么你可以使用它们作为:
%# let x and y be scalars/vectors/matrices of same size
x == y
isequalAbs(x, y, 1e-6)
isequalRel(x, y, 1e-6)