필터 지우기
필터 지우기

why this logical expression is wrong?

조회 수: 1 (최근 30일)
mohammad fallah
mohammad fallah 2019년 7월 18일
댓글: Peter Jarosi 2019년 7월 19일
Hi,
why this statment is wrong,
>> sind(30)==0.5
ans =
0
  댓글 수: 4
Walter Roberson
Walter Roberson 2019년 7월 18일
I seem to remember seeing a sind bug in the bug reports a couple of releases ago, but I cannot find that information now.
Peter Jarosi
Peter Jarosi 2019년 7월 18일
I think it's not a bug, because it depends on the method of approximation. That's an interesting question how developers of sind() function fixed sind(30). Whether there is an if statement in the code of sind() in order to set sind(30) exactly 1/2. :-)

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

채택된 답변

Peter Jarosi
Peter Jarosi 2019년 7월 18일
편집: Peter Jarosi 2019년 7월 18일
because of the accuracy problem of a floating-point system
>> format longE
>> sind(30)
ans =
4.999999999999999e-01
Never, ever compare two floating-point numbers with == operand!
See also:
  댓글 수: 11
Peter Jarosi
Peter Jarosi 2019년 7월 18일
I voted your question. It's a million dollar question, and the problem is general, not Matlab's fault.
Walter Roberson
Walter Roberson 2019년 7월 18일
The result of sind(30) should be exactly 1/2, but it appears that in some older releases it was not exactly that.
It is generally better to not compare for floating point equality except when you know that the exact bit-pattern occurs somewhere. For example, it is fair to test
A = min(B);
B == A
because you know that A will be a bit-for-bit copy of one of the values that is in B. (Well, except for some obscure cases involving non-default nan values... and in those cases, nan == nan is always false anyhow.)

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

추가 답변 (1개)

Steven Lord
Steven Lord 2019년 7월 19일
This is a bug. See Bug Report 1839169.
  댓글 수: 1
Peter Jarosi
Peter Jarosi 2019년 7월 19일
How did you fix it? Did you use a better approximation method (for instance longer Taylor series) or just put an if statement in the code of function sind()? :-)
(I'm joking)

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

카테고리

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