MATLAB: How to drop last N round-off error digits

MATLABnumerical accuracynumerical precisionround-off errors

a=sqrt(pi) returns 1.77245385090552, where the last digit is not reliable, and this digit is of the order 1e-14.
Now, a=sqrt(53512343*pi) returns 12965.8776658265, where the last digit or two are not reliable, and these digits are of the order 1e-9 — 1e-10.
The question is how to get rid of unreliable digits in a standardized and well-proven manner?
The problem is that these last digits may deviate strongly depending on input data of an algorithm leading to situations when some results that should be in fact equal are not equal in the last digit.
Note that
format long
should be executed before typing any expressions in order to see the full number of digits of the results.
Note also that "comparison up to some precision" is not a solution, as I need to store only one unique value of the answer, thus neglecting all its variations due to round-off errors. And I'm not aware about any unique()-like function that works with some tolerance.
The round-off errors in my application are usually small (i.e. they are in the last 1-2 digits).

Best Answer

Hi Ilya,
if you are happy with an output, then use fprintf:
a=sqrt(pi);
fprintf('a = %.14g\n', a)
a = 1.7724538509055
Otherwise: use e.g. eps to find the roundoff digit.
a = sqrt(pi);
e = eps(a);
% how many decimal digits it this?
digits = floor(-log10(e));
% cut off the last two
digits = digits - 2;
% round to this digit
aRound = round(a*10^digits) / (10^digits)
aRound =
1.772453850905500
Titus