부동소수점 연산은 치명적인 오류가 있습니다.
위에서 보다시피 0.1만 더했는데 엉뚱한 값들이 나오게 됩니다.
부동소수점 오류의 발생 이유는
컴퓨터에서 10진수를 2진수로 변화할 때 발생하는 구조적인 문제이죠
이렇기 때문에 float값을 0과 비교하거나
Float형 값들을 비교할 때는 아래와 같은 방법을 쓰게 됩니다.
0과 비교할 때는
if (sw
* sw > Mathf.Epsilon)
두수의 제곱근을 구해 Mathf.Epsilon과 비교
Mathf.Epsion은 0과 매우 가까운 값입니다.
즉
( 값 + Epsilon = 값 ) 이 되지만
( 0 + Epsilon = 0 )이 되지요
Float 형끼리 비교할 때는
Mathf.Approximately(1.0F, 10.0F / 10.0F))
※ 부동 소수점은 부정확하기에 비교를 위해서 등호(=) 연산자를
사용하는 것을 추천하지 않습니다.
(즉, 1.0 ==
10.0 / 10.0 은 true를 반환하지 않을수도 있습니다.)
댓글 없음:
댓글 쓰기