How does MATLab handle decimal accuracy?
8 次查看(过去 30 天)
显示 更早的评论
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;
- 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).
- 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.
0 个评论
回答(1 个)
Walter Roberson
2016-5-18
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 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Number Theory 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!