How does MATLab handle decimal accuracy?

7 views (last 30 days)
Isaiah van Hunen
Isaiah van Hunen on 18 May 2016
Commented: Walter Roberson on 21 May 2016
Hi,
I use MATLab to calculate an energy value up to a specific decimal place. However, I have noticed it can only do so up to its 54th decimal place. After that, when adding values (decimals) of the 55th power (numbers like 7.000000000000001e-55), no change is stored.
I have two questions;
  1. Is there something one can do to increase the decimal accuracy? I have read several related topics, and I'm afraid this is not, but it's worth a shot. I thought about storing the decimals places in an array, but MATLab also needs to calculate with this value, which an array would prevent (you'd have to put them in a value again, which would have that problem).
  2. How can I detect the maximum amount of decimal places that the computer can go with? My computer apparently handles 54, but I intend to share my code, and I'd like to give a warning if a user requests more decimal places than their computer will show (assuming this 54-value is different per computer). I read something about the use of eps(E), but I don't quite understand this or how to convert this to the number 54 (now it shows 5.551115123125783e-17)
Kind regards,
Isaiah van Hunen
P.S. I have no problem with rounded of values in my display, I use num2str(E,decimals) to ensure that it is shown to its maximum amount of decimal places.

Answers (1)

Walter Roberson
Walter Roberson on 18 May 2016
You are not correct:
>> 1e-200+2e-200+3e-200
ans =
6e-200
The limit is 53 binary places:
>> (1+2^(-52)) == 1
ans =
0
>> (1+2^(-53)) == 1
ans =
1
This number, 2^(-52) is also called eps when used in its relative form.
The limit is the same for everyone who uses IEEE 754 Double Precision. You cannot increase it except by switching to the Symbolic Toolbox or by using a third-party package such as John D'Errico's VPI (Variable Precision Integer) from the File Exchange
  5 Comments
Walter Roberson
Walter Roberson on 21 May 2016
About 15 decimal places from the first non-zero digit.

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!