더북(TheBook)

TAKEAWAY 5.31 산술식에서 좁은 타입(narrow type)을 사용하지 않는다.

덧셈과 곱셈과 같이 피연산자가 두 개인 연산자에 적용되는 타입 규칙은 이보다 훨씬 복잡하다. 두 피연산자의 타입이 서로 다를 수 있기 때문이다. 부동 소수점 타입 연산의 예를 몇 가지 살펴보자. 첫 번째와 두 번째 예는 문제가 없다. 정수 상수 1의 값이 double이나 complex float 타입의 범위를 벗어나지 않기 때문이다. 실제로 이런 혼합 연산에서 한쪽 타입의 범위가 다른 쪽 타입의 범위 안에 포함될 때, 결과에 대한 타입은 넓은 쪽 타입을 따를 때가 많다.

1      + 0.0   // 문제 없다. double
1       + I    // 문제 없다. complex float
INT_MAX + 0.0F // 정밀도가 떨어질 수 있다. float
INT_MAX + I    // 정밀도가 떨어질 수 있다. complex float
INT_MAX + 0.0  // 문제 없을 때가 많다. double

세 번째와 네 번째 예는 문제가 있다. signed int의 최댓값인 INT_MAXfloat이나 complex float의 범위를 벗어날 때가 많기 때문이다. 예를 들어 필자의 머신에서 INT_MAX + 0.0FINT_MAX + 1.0F와 같고 십진수로 2147483648이다. 마지막에 나온 예처럼 double 연산일 때는 대부분의 플랫폼에서 문제가 없다. 그렇지만 int가 64비트인, 현재 혹은 향후에 나올 플랫폼에서 정밀도가 떨어지는 문제가 발생할 가능성은 얼마든지 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.