float과 double의 차이
조회수 28343회
float
과 double
의 차이에 대해서 읽어 봤는데
대부분의 경우는 둘이 같은 결과를 내는 것 같더라구요
근데 제가 부동소수점 연산을 하는 문제를 풀 때
제 컴퓨터에서 돌릴 때는 10개 케이스에서
double
을 쓸 때랑 float
을 쓸 때랑 결과가 다 똑같이 나왔어요.
근데 문제 채점하는 서버에 내니까
float
형은 10개 중에 1개만 맞다고 뜨고
double
형은 10개 전부 다 맞다고 떴는데
왜 이런 거죠?
1 답변
-
본인의 컴퓨터와 서버의 환경이 다르기 때문입니다. C++ 표준이 자료형의 최소크기만 정해놨기 때문에 개인 컴퓨터에서
float
의 크기와 서버의float
크기가 다를 수 있고, 이 경우는 오버플로우가 발생할 수 있습니다.그리고
double
과float
은 엄청 다릅니다. 일반적으로double
은float
보다 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를 써야 합니다.
댓글 입력