# Some difference between MatLab and VS calculation

14 ビュー (過去 30 日間)
Igor Arkhandeev 2020 年 11 月 30 日
コメント済み: Igor Arkhandeev 2020 年 11 月 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 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 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.

サインインしてコメントする。

### Community Treasure Hunt

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

Start Hunting!