float과 double의 차이

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

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

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

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를 써야 합니다.

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.