numerical oddity with decimal multiplication

1 次查看(过去 30 天)
Running R2022b, I noticed the following:
58*0.1-5.8
ans =
8.8818e-16
However,
58/(1/.1)-5.8
ans =
0
Why is that, and how can it be avoided? It messes up subsequent equality operations.
Some further testing shows that
58*0.1-5.8-4*eps
ans =
0
57*0.1-5.7
ans =
0
59*0.1-5.9
ans =
0
and in fact it's 0 for most numbers´I randomly tested, however
28*0.1-2.8-2*eps
ans =
0
Thanks in advance to anyone able and willing to clarify :)

回答(1 个)

the cyclist
the cyclist 2023-8-9
Possibly the most "popular" question on this forum. Read the Accuracy of Floating-Point Data section of the Floating-Point Numbers documentation.
(You will also get many other answers here, but they will all boil down to that same information.)

类别

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

标签

产品


版本

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by