Round error using if statement. Two things don't equal each other
조회 수: 5 (최근 30일)
이전 댓글 표시
Ok this is the problem I am having.
I have an M-File containing the following...
>> x = sin(pi/6)
>> y = cos(pi/6)
>> mytan = x/y;
>> if mytan == tan (pi/6)
disp('equal')
else
disp('not equal')
end
......
When I run it, I want to get 'equal' to display but I keep getting 'not equal'
I know x = .5000 or .500000000000000 using format long
and y = .8660 or .866025403784439 using format long.
now mytan = x/y
comes out to be .5774 or 0.577350269189626 using format long
and tan(pi/6) is .5774 or 0.577350269189626 using format long
I should be getting the "equal to display"
however I am not.
Im pretty sure this is due to round off error, so how should I change my if statement to get the equal message to display.
Thank You
댓글 수: 0
채택된 답변
Fangjun Jiang
2011년 10월 4일
You are right about floating point rounding error. You can use eps
x = sin(pi/6)
y = cos(pi/6)
mytan = x/y;
if abs(mytan-tan(pi/6))<eps
disp('equal')
else
disp('not equal')
end
댓글 수: 3
Fangjun Jiang
2011년 10월 4일
Yes, I did the re-formating. But I didn't pay particular attention. What type of problem did you have before?
Walter Roberson
2011년 10월 4일
The original text with the >> lines was visually correct, and appeared to have 2 spaces at the beginning of every line, and showed up as formatted in the preview, but in the actual message display it showed up as if it was unformatted. I have encountered exactly the same situation once before and was hoping to preserve it so Mathworks could look at the binary of the file. Oh well. Next time.
추가 답변 (2개)
Walter Roberson
2011년 10월 4일
This is a known and unavoidable issue in any finite-precision computer, no matter what the base of arithmetic (decimal, binary, hex, whatever) that it uses. For more information, please read this FAQ
댓글 수: 0
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!