lshzang86   2년 전

아래 코드와 같이 반지름을 받을 때 int나 double로 파싱해서 받으면 정답처리가 되는데 float으로 받으면 오답이 뜹니다... 왜 그럴까요?

자동 캐스팅 될 때 캐스팅 되는 사이즈가 더 작으면 손실문제가 발생하는 건 알고 있는데 일단 flaot이 표시하는 범위가 double보다 작기도 하고 자연수를 곱하는 거니까 곱하기 했을 때 잘리는 값에서 오류가 생기진 않을 것 같고(잘려도 어차피 뒷자리는 전부 0일거라고 생각) 아니면 float끼리 곱했을 때 계산 후 flaot으로 저장되면서 짤리는 값이 double에서 잘리는 값보다 많아서 그 차이에서 오답이 생기는 건지...(하지만 이것도 소수점이 다 0이라 아니라고 생각) 일단 math.pi가 double값이라 문제는 uclid는 아니고 taxi쪽에서 문제가 생기는 것 같은데(2를 2d로 명시해서 실행하면 정답인 것을 보면 확실) 정확히 어떤 문제가 생기는 걸까요? 혹시 이유나 반례를 알려주시면 공부에 많은 도움이 될 것 같습니다...ㅠㅠ

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