float과 double의 차이


floatdouble의 차이에 대해서 읽어 봤는데 대부분의 경우는 둘이 같은 결과를 내는 것 같더라구요

근데 제가 부동소수점 연산을 하는 문제를 풀 때 제 컴퓨터에서 돌릴 때는 10개 케이스에서 double을 쓸 때랑 float을 쓸 때랑 결과가 다 똑같이 나왔어요.

근데 문제 채점하는 서버에 내니까 float형은 10개 중에 1개만 맞다고 뜨고 double형은 10개 전부 다 맞다고 떴는데 왜 이런 거죠?

  • 2016년 01월 21일에 작성됨

조회수 376


1 답변


좋아요
0
싫어요
채택취소하기

본인의 컴퓨터와 서버의 환경이 다르기 때문입니다. C++ 표준이 자료형의 최소크기만 정해놨기 때문에 개인 컴퓨터에서 float의 크기와 서버의 float크기가 다를 수 있고, 이 경우는 오버플로우가 발생할 수 있습니다.

그리고 doublefloat은 엄청 다릅니다. 일반적으로 doublefloat보다 2배 정도 더 정확합니다. double은 15-16개의 10진수를, float은 7개의 10진수를 표현하기 때문입니다.

float a = 1.f / 81;
float b = 0;
for (int i = 0; i < 729; ++ i)
        b += a;
printf("%.7g\n", b);   // prints 9.000023

인 반면,

double a = 1.0 / 81;
double b = 0;
for (int i = 0; i < 729; ++ i)
        b += a;
printf("%.15g\n", b);   // prints 8.99999999999996

이지요.

그리고, float의 최댓값은 약 3e38, double의 최댓값은 1.7e308입니다. long double같이 더 큰 부동소수점을 저장할 수 있는 자료형이 있지만, 이 모든 자료형들은 결국 round-off 에러가 발생할 수밖에 없습니다.

그러니 정확성이 중요하다면 int/fraction class를 써야 합니다.


로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close