Some difference between MatLab and VS calculation

7 次查看(过去 30 天)
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?

采纳的回答

John D'Errico
John D'Errico 2020-11-30
编辑:John D'Errico 2020-11-30
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 个评论
Igor Arkhandeev
Igor Arkhandeev 2020-11-30
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.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Logical 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by