• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

실수형 float 과 double

23.01.16 19:06 작성 조회수 1.75k

0

int와 long의 차이가

int는 21억 이하의 숫자, long은 21억 이상의 숫자 일 때 사용한다고 하셨는데

int로 충분히 사용 가능한 경우에 long을 사용하면 데이터가 남용되기 때문에 적절하게 사용하라고 하셨는데

float과 double의 경우에도 7자리 미만의 소숫점의 실수의 경우 double말고 float을 사용하는 것이 좋나요?

답변 1

답변을 작성해보세요.

1

안녕하세요?

먼저 질문에 대한 대답은 '네' 입니다.
float 은 7자리, double 15자리 정도의 정밀도를 가집니다. 그래서 상대적으로 낮은 정밀도의 실수인 경우 float 을, 높은 정밀도의 실수인 경우 double 의 사용을 권장드리는데요. 다만 7자리 미만의 소수점이라기보다는 이렇게 이해하시는 것이 좋습니다.

1234567 이라는 7자리의 수가 있습니다. 이 때 소수점을 어디에 찍느냐에 따라 다음과 같이 수가 달라질 수 있는데요. 이를 10 의 몇 승으로 곱하는 형태로 표현을 하면 우측의 값과 같습니다.

1) 1234567.0 = 1234567 x 10의 0승
2) 12345.67 = 1234567 x 10의 -2승
3) 123.4567 = 1234567 x 10의 -4승
4) 1.234567 = 1234567 x 10의 -6승
5) 0.01234567 = 1234567 x 10 의 -8승

즉 1234567 이라는 7자리는 float 을 이용하면 오차 없이 표현이 가능합니다. 아래에 예시 코드를 작성하였으며 주석으로는 실행 결과를 적었습니다.

System.out.println(1234567.0f); // 1234567.0
System.out.println(12345.67f); // 12345.67
System.out.println(123.4567f); // 123.4567
System.out.println(1.234567f); // 1.234567
System.out.println(0.01234567f); // 0.01234567

이번에는 1234567 앞에 9 를 붙여서 총 8자리의 수인 91234567 을 동일하게 출력해보겠습니다. 이 경우 맨 오른쪽 끝값이 7 임에도 불구하고 주석으로 작성한 실행 결과와 8, 7, 6, 5 로 표현되는 오차가 발생한다는 것을 확인할 수 있습니다.

System.out.println(91234567.0f); // 9.1234568E7
System.out.println(912345.67f); // 912345.7
System.out.println(9123.4567f); // 9123.457
System.out.println(91.234567f); // 91.234566
System.out.println(0.91234567f); // 0.91234565

이 부분을 감안하셔서 사용하려는 데이터의 정밀도에 따라 float 또는 double 을 선택하시면 되겠습니다.

감사합니다 😊

다비드님의 프로필

다비드

질문자

2023.01.16

딱 떨어지는게 아닌 정도의 정밀도 군요. 감사합니다!