일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- BFS
- 프론트엔드
- 타입스크립트
- 블록체인
- 쿠버네티스
- k8s
- 컴퓨터공학
- AWS
- 이슈
- 자바스크립트
- 가상화
- 리액트
- react
- 파이썬
- docker
- HTML
- TypeScript
- 클라우드
- 솔리디티
- CSS
- VUE
- 이더리움
- JavaScript
- 백준
- 알고리즘
- 백엔드
- 웹
- next.js
- es6
- kubernetes
Archives
- Today
- Total
즐겁게, 코드
Float형과 Double형, 누가 더 힘이 셀까? 본문
룸메한테서 오버로딩 문제 관련 질문을 받았다.
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
소소한 팁 : 광고를 눌러주시면, 제가 뮤지컬을 마음껏 보러다닐 수 있어요!
와!! 바로 눌러야겠네요! 😆