[기본]캐스팅 주의하기 by MusaPanz

정수 a , b, c 가 있다..

1) Result = (a * b) / c

2) Result = a * (b / c)


일반적인 상식으로 1)번과 2)번은 결과가 같다.

그. 런. 데.

프로그래밍에서는 위 결과가 다를 수 있다.

다음과 같이 코딩을 하고

int a=18;
int b=290;
int c=36;

int nRet = (a*b) / c;
int nRet2 = a* (b/c);

Ret 값을 비교하면 결과가 다르게 나온다는 것을 알 수 있다.

이것은 왜 그런고 하니

계산의 오차를 버리는 시기가 틀리기 때문이다.

a, b, c 모두 정수 이기 때문에 계산 중간 결과도 정수형으로 리턴된다.

즉, b / c 의 계산 결과는 정수형이란 말이다.

다시말해 1)번 케이스는 소수점 이하를 버리는 시기가 마지막 결과 전이고,

2)번 케이스는 a를 곱하기 전 소수점 이하를 버리고 곱하게 된다는 말이다.

유 갓 잇?!!

## #####################

정수 b, c 가 있다고 하고
 
double ret1 = b / c;
int ret2 = b / c;
 
를 계산...
 
위 계산에서 ret1과 ret2 는 동일하게 정수형으로 리턴을 받는다.

##########################

트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://mahapunch.egloos.com/tb/2315945 [도움말]

덧글

덧글 입력 영역


메모장