floating-point arithmetic
조회 수: 5 (최근 30일)
이전 댓글 표시
It is obvious that
|0.1234-0.123| = 0.0004
however, the following Matlab result is a little bit different!
>> 0.1234-0.123
ans =
3.999999999999976e-04
I think this happens because the IEEE754 conversion of 0.1234 and 0.123 have infinite digits.
Does anyone have more explanation?
댓글 수: 0
답변 (2개)
Star Strider
2022년 11월 8일
편집: Star Strider
2022년 11월 12일
‘I think this happens because the IEEE754 conversion of 0.1234 and 0.123 have infinite digits.’
Correct.
‘Does anyone have more explanation?’
I doubt it. Your explanation about covers it. (The relevant MATLAB documentation is in Floating-Point Numbers.)
.
EDIT — (12 Nov 2022 at 11:44)
‘In double precision we can trust on about 15 decimal digits.In double precision we can trust on about 15 decimal digits.’
format long
FPP = eps
FPP = 1/eps
FPPlog2 = log2(eps)
FPPlog2 = log2(1/eps)
.
댓글 수: 0
James Tursa
2022년 11월 8일
편집: James Tursa
2022년 11월 8일
"... the IEEE754 conversion of 0.1234 and 0.123 have infinite digits ..."
Not sure what you mean by this statement. Neither of these numbers can be represented exactly in IEEE double precision floating point which of course uses a finite number of binary bits. Maybe you mean an exact conversion of these specific decimal numbers to binary would require an infinite number of binary bits?
The exact binary-to-decimal conversions of the numbers that are stored (the closest representable values to the decimal numbers above) are:
fprintf('%.56f',0.1234)
fprintf('%.52f',0.123)
fprintf('%.56f',0.1234 - 0.123)
댓글 수: 8
James Tursa
2022년 11월 15일
The change in the background library code for Windows MATLAB was R2017b. Prior to that it displayed trailing 0s after about 16 digits, but from R2017b onwards it displays exact conversion when enough digits are requested. This is what motivated my num2strexact( ) FEX submission many years ago.
참고 항목
카테고리
Help Center 및 File Exchange에서 Data Type Conversion에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!