%% Specify Absolute Tolerance
% By default, uniquetol uses a tolerance test of the form abs(u-v) <= tol*DS, where DS automatically scales based on the magnitude of the input data. You can specify a different DS value to use with the DataScale option. However, absolute tolerances (where DS is a scalar) do not scale based on the magnitude of the input data.
% First, compare two small values that are a distance eps apart. Specify tol and DS to make the within tolerance equation: abs(u-v) <= 10^-6.

x = 0.1;
uniquetol([x, exp(log(x))], 10^-6, 'DataScale', 1)

%
% Next, increase the magnitude of the values. The round-off error in the calculation exp(log(x)) is proportional to the magnitude of the values, specifically to eps(x). Even though the two large values are a distance eps from one another, eps(x) is now much larger. Therefore, 10^-6 is no longer a suitable tolerance.

x = 10^10;
uniquetol([x, exp(log(x))], 10^-6, 'DataScale', 1)

%
% Correct this issue by using the default (scaled) value of DS.

format long
Y = [0.1 10^10];
uniquetol([Y, exp(log(Y))])

% Copyright 2015 The MathWorks, Inc.