equality operator between matrix and scalar
조회 수: 3 (최근 30일)
이전 댓글 표시
consider:
a=[-1:0.1:1];
c=a==.1;
it returns c as a matrix of nulls; while I expect c(12) to be 1.
댓글 수: 0
채택된 답변
Matt Kindig
2012년 4월 17일
This is due to floating point precision errors, explained here: http://blogs.mathworks.com/loren/2006/08/23/a-glimpse-into-floating-point-accuracy/
A better way to do this is by comparing against a tolerance, such as:
c = abs(a-0.1)<=eps
댓글 수: 0
추가 답변 (3개)
Kye Taylor
2012년 4월 17일
The value .1 and a(12) differ by only one bit as a result of numerical round-off. You can see this with the commands
num2hex(.1)
num2hex(a(12))
A better way to test equality takes into account the possibility of numerical round-off. For example, create your new c variable with the command
c = abs(a-0.1)<=eps(max(a));
댓글 수: 0
James Tursa
2012년 4월 17일
You can try this to see what the numbers are exactly:
num2strexact((-1:0.1:1)')
Sometimes a beter way to do this is to have an array with integer values to start with and then create a 2nd array with the fractional values. E.g.,
A = -10:10;
a = A / 10;
c = A==1;
You can use a for downstream calculations just like before, and you can use c for the value testing.
You can find num2strexact on the FEX here:
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Special Functions에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!