How to get around round off error?

9 visualizzazioni (ultimi 30 giorni)
ARSHA MAMOOZADEH
ARSHA MAMOOZADEH il 8 Lug 2019
Commentato: Stephen23 il 8 Apr 2021
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 Commenti
ARSHA MAMOOZADEH
ARSHA MAMOOZADEH il 8 Lug 2019
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 il 8 Apr 2021
"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:

Accedi per commentare.

Risposte (1)

Zakaria moeri
Zakaria moeri il 8 Apr 2021
take a look at vpa and digits method already exist in matlab documentation.

Community Treasure Hunt

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

Start Hunting!

Translated by