Page 27 -
P. 27
1.2.2 부동소수점 타입
부동소수점 타입은 소수점 부분이 있는 숫자를 나타낸다. 부동소수점 타입 두 가지를 표 1-2에 정
리했다.
표 1-2 부동소수점 타입
타입 저장 공간 범위
float 4바이트 약 ±3.40282347E+38F(유효자릿수 6~7)
double 8바이트 약 ±1.79769313486231570E+308(유효자릿수 15)
예전에는 메모리가 부족해서 4바이트 부동소수점 수를 사용하는 것이 일반적이었다. 하지만 소수
점 자리 일곱 개로는 많은 것을 표현하지 못하기에 요즘에는 ‘배정밀도(double precision)’ 숫자가 기
본이다. float는 저장할 부동소수점 수가 많을 때만 사용하는 것이 좋다.
float 타입 숫자에는 접미어 F를 붙인다(예를 들어 3.14F). 3.14처럼 부동소수점 리터럴에 접미어
F를 붙이지 않으면 double 타입이 된다. double 타입 리터럴에는 접미어 D를 선택적으로 붙일 수
있다(예를 들어 3.14D).
-10
Note 부동소수점 리터럴을 16진수로 나타낼 수 있다. 예를 들어 0.0009765625 = 2 을 0x1.0p-10으로
작성할 수 있다. 16진수 표기법은 지수를 나타낼 때 e가 아니라 p를 사용한다(e는 16진수다). 숫자를 16진법으로 작성
하더라도 지수(즉, 2의 거듭제곱을 나타내는 수)는 10진법으로 작성한다는 점을 알아 두자.
무한대(∞)를 나타내는 Double.POSITIVE_INFINITY, 음의 무한대(-∞)를 나타내는 Double.
NEGATIVE_INFINITY, 숫자가 아니라는 것(Not a Number, NaN)을 나타내는 Double.NaN 등 특별한 부
동소수점 값이 있다. 예를 들어 1.0 / 0.0을 계산한 결과는 양의 무한대다. 0.0 / 0.0 또는 음수의
루트를 계산하면 NaN이 된다.
Caution ‘숫자가 아닌’ 값은 모두 서로 다른 값으로 간주한다. 따라서 if (x = = Double.NaN)을 작성해
서는 x가 NaN인지 검사할 수 없다. if (Double.isNaN(x))로 작성해야 검사할 수 있다. Double.isInfinite
로는 ±∞를 테스트하고, Double.isFinite로는 부동소수점 수가 무한대도 아니고 NaN도 아닌지 검사할 수 있다.
038
코어 자바 9(본문)최종.indd 38 2018-03-15 오전 11:31:01