MATLAB Answers

Some difference between MatLab and VS calculation

5 views (last 30 days)
Hello! The question is very simple. I try to calculate exp(-8.7) in MatLab and Visual Studio software. My simple code is
fprintf("%.30f", exp(-8.7));
The results in Visual Studio 2019 and MatLab R2018b below:
0.000166585810987633539366828406 (VS)
0.000166585810987633512261774094 (MatLab)
Who can tell me what result more correct?

  0 Comments

Sign in to comment.

Accepted Answer

John D'Errico
John D'Errico on 30 Nov 2020
Edited: John D'Errico on 30 Nov 2020
Which is more correct? Neither is correct in the bolded digits you post. In fact, the digit preceding that is also incorrect, in both cases.
exp(vpa('-8.7'))
ans =
0.00016658581098763341149213050712475
In both cases, the digits beyond 987633... are garbage.
Both tools are computing an essentially double precision computation of exp(x), but the result will be correct only to roughly 16 significant digits. To go beyond that point is to compute meaningless dreck.
If you want to know which is "more" correct, I guess MATLAB wins here by a hair. It as slightly less incorrect in the last digit before it begins to diverge from the "correct" value.
As another point of comparison, below i use code I wrote myself (in MATLAB), so I know it to be correct. Here, 60 decimal digits are used, then rounded so only 50 were displayed:
exp(hpf('-8.7',[50,10]))
ans =
0.00016658581098763341149213050712474673081123537780704
And if you don't believe me (nobody ever seems to) then Wolfram Alpha tells me it is:
0.0001665858109876334114921305071247467308112353778070434276
So my rounding to 50 digits seems to have been correct.

  1 Comment

Igor Arkhandeev
Igor Arkhandeev on 30 Nov 2020
Wow! To be honest, I'm just thrilled! Thank you very much! I certainly haven't encountered this before, but I now have food for thought.

Sign in to comment.

More Answers (0)

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by