Significant figures discrepancy in complex number operations
1 view (last 30 days)
Show older comments
Attached is my m-file where I take 2 complex numbers X & Y and multiply them by a decaying exponenential, F, & then sum the results. I executed the operation in 2 separate ways: 1) X*F+Y*F; 2) (X+Y)*F;
The results do not concur past 10^-16. You can see this by my workspace variable "alert". Is this due to the precision of significant figures within MATLAB? The 2 approaches should yield the identical results if I am correct.
One might ask why be so concerned past 16 significant figures? What concerns me is that some unforeseen error in computing phase information might crop up. Is there some trick I could implement to avert any unforeseen errors?
0 Comments
Answers (1)
Walter Roberson
on 6 Nov 2016
IEEE 754 Double Precision uses (effectively) 53 bits of mantissa, able to reflect relative changes down to 2^(-53) . If you are using values in the approximate range of 1.0, then 2^(-53) of that is 1.1102230246251565404236316680908203125 * 10^(-16) which is not quite as good as 10^(-16) . In the area of 1.0, a single bit difference translates to about 1E-16 change in output.
It is a truism in floating point calculation that the same calculation performed two different ways that are "algebraically equivalent" can give you different results due to differences in rounding. http://matlab.wikia.com/wiki/FAQ#Why_is_0.3_-_0.2_-_0.1_.28or_similar.29_not_equal_to_zero.3F
Also, I seem to recall that some of the hardware instructions are permitted to have an accuracy less than 1 ULP (Unit In The Last Place); the details of the standard would have to be checked for that kind of detail.
If you need higher precision you will need to use a higher precision package such as the Symbolic Toolbox
0 Comments
See Also
Categories
Find more on Numbers and Precision in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!