[왜 소수점 연산은 정확하지 못할까❓]
📘programmers: 이모티콘 할인행사
이 문제를 풀면서 3개의 테스트 케이스를 통과하지 못하는 문제가 발생했다. 2시간을 코드를 들여다 봐도 문제가 없어서 결국 질문 게시판을 참고했다. 부동 소수점 연산의 정확도 차이로 인해 계산식의 괄호를 바꿨더니 해결됐다.
(price * (100 - discount)) / 100 # 정답
price * ((100 - discount) / 100) # 오답
두 계산식의 차이는 수학적으로는 같지만 컴퓨터에서는 나눗셈을 먼저하냐
아니면 나중에 나눗셈을 하냐
에 따라 오차가 발생하는 것 같다.
print(0.1 + 0.2) # 출력 0.30000000000000004
대표적인 또 다른 예시가 있다.
그래서 결론은 알고리즘을 풀 때
나 비즈니스 로직을 짤 때
소수점 연산이 필요한 부분은 최대한 나중에 나눗셈을 해주는 것이 정확도를 높이는 방법이다.