관리 메뉴

즐겁게, 코드

Float형과 Double형, 누가 더 힘이 셀까? 본문

💬 언어/Java

Float형과 Double형, 누가 더 힘이 셀까?

Chamming2 2021. 4. 7. 17:36

룸메한테서 오버로딩 문제 관련 질문을 받았다.

float mul(float a) {
    return a * a;
}

double mul(double a) {
    return a * a;
}

내용이 뭐냐면 실수형을 인자로 받는 두 함수가 오버로딩되었을 때, mul(3.0) 을 호출하면 과연 어떤 함수가 호출되냐는 질문이었다.

정말 재밌는 질문이어서 직접 코드를 짜봤는데, 그 결과 double 형으로 오버로딩된 함수가 호출되는 것을 확인할 수 있었다.

public class main {
    public static void main(String[] args) {
        overload o = new overload();
        o.mul(3.0); // double: 9.000000
    }
}
public class overload {
    public float mul(float a) {
        System.out.printf("float: %f", a * a);
        return a * a;
    }

    public double mul(double a) {
        System.out.println(a * a);
        System.out.printf("double: %f", a * a);
        return a * a;
    }
}

이에 대해 찾아보니 C / C++ / Java에서는 기본적으로 실수형을 double로 처리하기 때문에 생기는 문제인 듯 하다.

왜 기본 실수형은 double인가?

float는 4바이트, double은 8바이트를 차지하는데 그럼 기본적으로 메모리 낭비를 깔고 가는것이 아닌가?

맞다. 분명 메모리만 따지면 두 배의 손해를 보게 된다.

 

다만 입력되는 값이 float 타입이 나타낼 수 있는 범위를 넘어섰다면 원하지 않는 근사값이 출력되게 되는데, 이처럼 약간의 메모리 이득을 보기보다는 혹여라도 수 처리에서 생길 수 있는 절삭(truncate) 문제를 해결하고자 기본 실수형을 double로 약속한 것 같다.

반응형
Comments
소소한 팁 : 광고를 눌러주시면, 제가 뮤지컬을 마음껏 보러다닐 수 있어요!
와!! 바로 눌러야겠네요! 😆