az6090   5년 전

테스트 케이스에서는 맞게 나오고

입력에 0.0 또는 10.0을 섞어서 넣어주어도 맞게 계산되는 거 같은데.....

혹시 예외처리를 덜 한건지 궁금해서 질문 드립니다.

seico75   5년 전

반올림이 문제인 것 같습니다. 셋째자리 반올림이 없네요.

보통 printf 는 %.2f 를 할때 알아서 셋째자리 반올림을 하긴할텐데..

하는 방식이 정확히 정의가 안되어 있는 것 같습니다. (관련 사이트가 있었는데 못찾겠네요..)

예를 들면, 셋째자리 반올림이 셋째자리가 5보다 크거나 같으면 둘째자리 +1로 하거나 ("Round to nearest, ties away from zero" 보통 많이 아는 방법)

오차가 가장 적으나 가능하면 둘째자리를 짝수로 만드는 방법 “round to nearest and ties to even”이 있을 수 있습니다.

근데 두번째로 처리하는 컴파일러가 많은 것 같습니다. 

참고로 아래 것을 한번 돌려보세요.

#include 
using namespace std;

int main() {
	printf( "%.2f ", 5.00);
	printf( "%.2f ", 5.115);
	printf( "%.2f ", 5.125);
	printf( "%.2f ", 5.135);
	return 0;
}

seico75   5년 전

https://www.exploringbinary.co...

Vstudio 는 우리가 아는 반올림이 될 수 있을 것 같습니다.

ideone(https://ideone.com) 에서는 아래와 같이 나옵니다.


5.00 5.12 5.12 5.13 

az6090   5년 전

소스 확인했습니다.

반올림 문제가 맞는거 같네요....

위의 소스 컴파일시 Visual에서는 5.00 5.12 5.13 5.13이렇게 출력 되네요

감사합니다!!!!!!!!!!!

댓글을 작성하려면 로그인해야 합니다.