How to get around round off error?

2 ビュー (過去 30 日間)
ARSHA MAMOOZADEH
ARSHA MAMOOZADEH 2019 年 7 月 8 日
コメント済み: Stephen23 2021 年 4 月 8 日
Hello all, I read about the round off error that MATLAB experiences with double precision numbers, and it being caused by how MATLAB stores numbers in binary. I was wondering if there was any way to get around this. Specifically I would like to subtract 0.021557700000000 from 0.021557800000000 without any round off error. The answer should be 1e-7 but MATLAB gives -9.999999999940612e-08. I tried to convert the numbers to symbols and subtract symbolically but I got the same error. Any ideas?
  11 件のコメント
ARSHA MAMOOZADEH
ARSHA MAMOOZADEH 2019 年 7 月 8 日
Yep. Currently I am testing this out...
A=(215577/10000000);
B=(215578/10000000);
C=(215579/10000000);
BA=B-A;
CB=C-B;
BA_eps=eps(BA)
CB_eps=eps(CB)
if BA_eps == CB_eps
B=C;
A=C;
end
This seems to be working, and I think I am going to add a tolerance on the if statement. Another thing I made was this however it still has the round off error.
F21=round(F2-F1,16)
F32=round(F3,F2,16)
16 is the maximum number of decimals my input has.
Stephen23
Stephen23 2021 年 4 月 8 日
"16 is the maximum number of decimals my input has."
Then any attempt to define a higher precision number for your operations is totally meaningless.
I very much doubt that your input data were even measured to 16 significant digit accuracy, given that some of the most accurate measurements in science are around the same order:

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

回答 (1 件)

Zakaria moeri
Zakaria moeri 2021 年 4 月 8 日
take a look at vpa and digits method already exist in matlab documentation.

カテゴリ

Help Center および File ExchangeLogical についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by