problem with low infinite number

2 ビュー (過去 30 日間)
Trop Trader
Trop Trader 2024 年 3 月 3 日
移動済み: John D'Errico 2024 年 3 月 6 日
Ediff(8,35)
ans =
7.4525e+03
profit(8,35)
ans =
7.4525e+03
bu=minus(profit,Ediff);
bu(8,35)
ans =
1.8190e-12
Why does subtracting 2 equal numbers produce a very small number?
  1 件のコメント
Trop Trader
Trop Trader 2024 年 3 月 6 日
移動済み: John D'Errico 2024 年 3 月 6 日
ok thank

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

回答 (2 件)

the cyclist
the cyclist 2024 年 3 月 3 日
編集済み: the cyclist 2024 年 3 月 3 日
Because their floating-point representations are not exactly equal.
You can see that they are not quite equal:
load("matlab_Ediff.mat","Ediff");
load("matlab_profit.mat","profit");
fprintf("Ediff = %16.14f\n",Ediff(8,35))
Ediff = 7452.50000000000182
fprintf("profit = %16.14f",profit(8,35))
profit = 7452.50000000000364

John D'Errico
John D'Errico 2024 年 3 月 3 日
They only look the same, to 4 decimal places.
format short
x = 1.23456789;
y = 1.23456987;
[x,y]
ans = 1×2
1.2346 1.2346
They certainly look the same to me. But only if I don't look at their actual values, down to the last digits. If I subtract them of course, they are seen to be different.
x - y
ans = -1.9800e-06
Surely you would expect the difference to be non-zero, even though, when displayed as only 5 dignificant digits, they seem identical?
format long
[x,y]
ans = 1×2
1.234567890000000 1.234569870000000

カテゴリ

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

Community Treasure Hunt

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

Start Hunting!

Translated by