Search

기본형 - 실수형

Search
자료형
bit
byte
저장 가능한 값의 범위
비고
double
Open
64
8
±4.9E-324 ~ 1.8E308 ±(4.9×10^-324 ~ 1.8×10^308)
정밀도 15자리 오차 범위 : float < double
COUNT2

실수형의 오버플로우와 언더플로우 (Overflow & Underflow)

오버플로우 : 최대값을 초과할 때 발생 → 값은 무한대
언더플로우 : 최소값을 초과할 때 발생 → 값은 0으로

실수형에 큰 값을 저장할 수 있는 이유?

같은 4 byte임에도 정수형과 달리 큰 값을 저장할 수 있는 이유
→ 저장하는 형식이 다르기 때문
float 타입과 같은 실수형은 부호(S), 지수(E), 가수(M)로 이루어져 있음.
2의 제곱을 곱한 형태 (±M × 2^E)로 저장하기 때문에 큰 범위 값 저장이 가능

정밀도 (precision)

큰 값을 저장하기 때문에 오차가 발생할 수 있음.
→ 오차를 줄이려면 높은 정밀도가 필요 → 정밀도가 높은 double 형을 많이 사용
정밀도가 15자리 → 15자리의 10진수를 오차없이 저장 가능
FloatEx1.java

실수형의 저장 형식

부동소수점수(floating-point) 형태로 저장
부호(S), 지수(E), 가수(M)±M × 2^E
float → S(1) + E(8) + M(23) = 32(4 byte)
double → S(1) + E(11) + M(52) = 64(9 byte)
Search
기호
의미
설명
부호 (Sign bit)
0 → 양수, 1 → 음수
지수 (Exponent)
부호있는 정수 지수의 범위 : -127~128(float) / -1023~1024(double)
가수 (Mantissa)
실제 값을 저장하는 부분 최대 2진수로 23자리 → 10진수로 7자리(float) 정밀도 최대 2진수로 52자리 → 15자리(double) 정밀도

부동소수점의 오차

10진수가 아닌 2진수로 실수를 저장하기 때문에 무한소수가 되는 등 오차 발생 가능
→ 2진수로는 10진 소수를 정확히 표현 불가
10진수론 유한소수라도 2진수로는 무한소수, 가수값 한정에 따른 오차 등..

정규화

2진수로 변환된 수를 저장할 때 1.xxx × 2^n 형태로 변환하는 것
정규화된 2진 실수는 항상 1.로 시작
→ 제외한 나머지 23자리 숫자가 가수로 저장됨. 나머진 잘려나감.
기저법 : 부호있는 정수를 저장하는 방법
저장할 때 특정값(기저)를 더했다가 읽어올 때는 다시 뺌.
1.001000…011011011… × 2^3 (빨간색은 오차) 0 100 0001 0 011 0001 1111 1001 1010 1101
부호 (오렌지)
지수 3과 기저 127이 2진수로 변환되어 저장됨. (초록)
가수 (블루)
FloatToBinEx.java

참고 자료