| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 예제
- 반응형 웹 프로젝트
- HTML
- BorderLayout
- CSS
- 반응형웹
- 파이썬
- GridLayout
- FileWriter
- rnn
- java
- ObjectOutputStream
- Database
- inline
- g검정
- FFT
- 메서드
- oracle
- html 프로젝트
- 상속
- 사전학습
- html 기초
- Position
- 푸리에 변환
- 미디어쿼리
- css 기초
- 퍼셉트론
- iframe 태그
- FlowLayout
- Codility
- Today
- Total
도라에몽주머니
[Java] 실수형(float, double)의 소수점 표현 방식, 부동소수점 본문
개요
지금까지 미루던 부동소수점 표현 방법 정리.
학부때도 이해한 척 넘어갔는데 이번 수업에 나오길래 다시 한번 정리하기로 했다.
실수 표현 방법
실수(float, double)를 표현하는 방법에는 크게 2가지가 있다.
고정 소수점 방식과 부동 소수점 방식이다.
* 고정 소수점(Fixed Point)
: 소수점의 위치를 미리 고정해두고 10진수를 2진수로 변환하여 그대로 사용하는 방식. 남는 자리는 0으로 채운다.

소수로 표현된 10진수를 2진수로 바꾸는 법을 자꾸 까먹어서 정리.

* 부동 소수점(Floating Point)
: 고정 소수점과는 다르게 10진수를 2진수로 변환하여 그대로 넣지 않고 일련의 과정을 거친다. (아래 설명 참고)
더 넓은 표현 범위를 가지기 때문에 부동소수점 방식을 더 많이 이용한다.
부동 소수점(Floating Point) 이란
- 대표적인 부동 소수점 자료형은 float와 double이다. float는 32비트, double은 64비트이다
- 메모리에 표현될 때, 부호부, 지수부, 가수부의 세 부분으로 구성된다
float: 부호부(1자리) + 지수부(8자리) + 가수부(23자리) = 32비트
double: 부호부(1자리) + 지수부(11자리) + 가수부(52자리) = 64비트
실수를 메모리에 표현하는 방법
ex) -118.625를 메모리에 표현하기
1. -118.625는 음수이므로 부호부를 1로 설정해준다

2. 절대값인 118.625를 이진법으로 나타내준다
# 정수부 변환
118 (10진수)
= 1110110 (2진수)
# 소수부 변환
0.625 (10진수)
= 0.625 x 2 = 1.25 → 정수부 1
= 0.25 x 2 = 0.5 → 정수부 0
= 0.5 x 2 = 1 → 정수부 1
# 이진법 변환 결과
118.625
= 1110110.101
3. 정수부가 한자리가 되도록 변환해준다. (X.XXXXXX * 2^n의 형태로 변환)
1110110.101 → 1.110110101 x 2^6
4. 소수점 아래부분이 가수부가 되도록 가수부의 남은 bit자리를 0으로 채워준다. (23bit)
1101 1010 1000 0000 0000 000 x 2^6
5. 위에서 구한 bit를 가수부로 설정한다.

6. 지수부에 편향값(bias)을 더해준 후 이진수로 변환해준다.
* float의 편향값: 127
double의 편향값: 1023
# 지수부 + 편향값 (float)
6 + 127
= 133 (10진수)
= 10000101 (2진수)
7. 위에서 구한 bit를 지수부로 설정한다.

Reference
https://velog.io/@maketheworldwise/float-double-%EB%B6%80%EB%8F%99%EC%86%8C%EC%88%98%EC%A0%90
'Programming > Java' 카테고리의 다른 글
| [Java] 파일 입출력 정리 (0) | 2022.11.13 |
|---|---|
| [Java] 진법 변환 정리 (N진수 ↔ 10진수) (0) | 2022.11.03 |
| [Java] extends, implements의 차이 (0) | 2022.10.11 |
| [MacOS / JAVA] MacOS에서 이클립스(Eclipse) 설치하기 (0) | 2021.03.05 |