어찌 풀어야할지 고생을 했는데, 아래의 주석대로 풀면 수식으로 풀린다. 처음 떠올린 수식은 수식의 아랫부분 식이었는데, f 가 부동소수가 되어서 오차가 심하게 발생하여 쓸 수가 없었다. 위 수식은 모두 100을 곱해서 정수단위로 만들고 현재 소숫점을 정수로 저장해서 사용하므로 결과적으로 정수끼리의 계산으로 처리되어 한번의 나눗셈으로 값을 구할 수 있게 된다. 한번의 나눗셈은 ceil 함수로 커버할 수 있으므로 오차는 문제가 되지 않는다.
double(x)*100 / y 여기도 double(x)/ y * 100 하면 0.799999 이러한 오차문제에 빠지게 된다. 우리가 관심있는 것은 소숫점 2번째 값까지 이므로 미리 100 을 곱하면 정수단위로 넘어가 부동소수점 문제에서 벗어난다.
댓글남기기