trying to understand why I get 2.2204e-16 rather than 0

조회 수: 18 (최근 30일)
Ancalagon8
Ancalagon8 2021년 8월 28일
댓글: Walter Roberson 2021년 8월 28일
Im trying to understand why when i make x-y (where x=1.6 and y=1.6) i do not get 0 as a result.

답변 (1개)

DGM
DGM 2021년 8월 28일
편집: DGM 2021년 8월 28일
Simply put, the assumption that both x and y are equal to the same value is incorrect. One or both have accumulated rounding error in some undescribed process.
% x and y are assigned the same value
x = 1.6;
y = 1.6;
x-y
ans = 0
% y has accumulated some rounding error
k = pi;
y = k*(y/k);
x-y
ans = 2.2204e-16
% the difference is nonzero, but they look the same
[x y]
ans = 1×2
1.6000 1.6000
% but that's just because the error is small relative to the nominal value
[x y]-1.6
ans = 1×2
1.0e+-15 * 0 -0.2220
Not all numbers can be represented exactly in base 2, just as not all numbers (e.g. 1/3) can be represented exactly in base 10.
  댓글 수: 1
Walter Roberson
Walter Roberson 2021년 8월 28일
Minor correction: all rational numbers can be represented exactly in base 2 or base 10 -- but it might take infinite precision to do so!! Since there is only a finite amount of resources in the universe, what we can represent in base 2 or base 10 in a computer is finite length rather than infinite length, not all rational numbers can be represented in base 2 or base 10 in a computer .

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by