1
У меня есть две функции евклидова расстояния, одна из которых использует bsxfun
, а другая - repmat
. Они дали несколько разные результаты, на Matlab 2012a, OSX. Напримерmatlab bsxfun числовая точность
x = randn(32, 50);
y = randn(32, 50);
xx = sum(x.*x, 1);
yy = sum(y.*y, 1);
xy = x'*y;
d1 = sqrt(abs(repmat(xx', [1 size(yy, 2)]) + repmat(yy, [size(xx, 2) 1]) - 2*xy));
d2 = sqrt(abs(bsxfun(@plus, xx', bsxfun(@minus, yy, 2*xy))));
isequal(d1, d2)
figure;hist(d1(:)-d2(:), 50)
Почему это, или я что-то пропустил?
Для получения дополнительной информации, помимо ответа, как, почему, см (HTTP [плавающая добавление точек и умножение ассоциативно?]: // StackOverflow. com/questions/10371857/is-floating-point-addition-and-multiplication-associative), и из связанного ответа [Что каждый компьютерный ученый должен знать о арифметике с плавающей точкой] (http://docs.oracle.com /cd/E19957-01/806-3568/ncg_goldberg.html). – TroyHaskin
@TroyHaskin Спасибо! – Maurits