개발 공부/자바

자바 공부 일지 (기초)

baby-t 2026. 2. 16. 23:11

02.16

1. 자바의 실수 표현 원리

 

자바는 실수를 표현할 때 부동 소수점(Floating Point) 방식을 사용한다.

1) 고정 소수점 vs 부동 소수점

  • 고정 소수점: 32비트 중 1비트는 부호, 15비트는 정수, 16비트는 소수 등으로 자릿수를 딱 정해놓고 쓰는 방식. 구현은 단순하지만, 표현할 수 있는 수의 범위가 좁아서 잘 쓰지 않는다.
  • 부동 소수점: 소수점의 위치를 고정하지 않고 '떠다니게(Floating)' 만든다. **지수부(Exponent)**와 **가수부(Mantissa)**로 나누어 표현하며, 같은 비트 수라도 정수형보다 훨씬 넓은 범위를 표현할 수 있다.

2) 저장 구조 (32비트 float 기준)

  • 부호 비트 (1 bit): 양수면 0, 음수면 1.
  • 지수부 (8 bits): 소수점의 위치를 결정한다. (2의 몇 승인지)
  • 가수부 (23 bits): 실제 유효 숫자를 저장한다.

3) 변환 과정 예시 10진수 실수를 컴퓨터에 저장하는 과정은 다음과 같다.

  1. 2진수 변환: 먼저 정수부와 소수부를 각각 2진수로 바꾼다.
  2. 정규화 (Normalization): 1.xxxxx * 2^n 형태로 소수점을 이동시킨다. (가장 앞을 무조건 1로 맞춤)
    • 예: 101.101 (2진수) -> 1.01101 * 2^2
  3. 지수부 저장 (Bias): 지수 n에 **127(Bias)**을 더해서 저장한다. (음수 지수를 표현하기 위함)
    • 위 예시에서 지수는 2이므로, 2 + 127 = 129를 2진수로 바꿔 지수부에 넣는다.
  4. 가수부 저장: 정규화된 결과(1.01101)에서 맨 앞의 1과 점(.)을 떼고 나머지 01101...만 가수부에 채워 넣는다. (어차피 맨 앞은 무조건 1이니까 저장 공간을 아끼기 위함)