정수 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 는 동일하게 정수형으로 리턴을 받는다.
##########################
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 는 동일하게 정수형으로 리턴을 받는다.
##########################





덧글