고정 소수점(固定(굳을 고, 정할 정)소수점)
- 움직이지 않고 고정된 소수점을 뜻한다.
부동소수점(浮動(뜰 부, 움직일 동)소수점)
- 고정되지 않고 움직이는 소수점을 뜻한다.
- 부동소수점은 IEEE 754 표현에 따라 m은 1.XXXX의 형태로 만들기로 정해져 있다.
이들은 컴퓨터에서 취급하는 방법이기 때문에 2진수를 사용한다.
예를 들어보겠다.
1234.5678
이라는 고정 소수점이 있다.
이를 부동 소수점으로 바꾸기 위해선 아래와 같은 형태를 가질것이다.
1.2345678 x 10^3, 0.12345678 x 10^4 등등 ..
우리는 해당 소수점을 컴퓨터 내에서 사용한다.
그말인 즉슨 2진수의 형태로 사용한다는 것이다.
컴퓨터에서 사용하기 위해 2진수로 바꾸는 방법을 살펴보자
0.125를 2진수로 바꿔줘보자. 해당 과정을 따라해보자.
0.125 * 2 = 0.250 -> 0을 빼내고 나머지 0.250
0.25 * 2 = 0.5 -> 0을 빼내고 나머지 0.5
0.5 * 2 = 1.0 -> 1을 빼내고 나머지 0
마지막 나머지가 0이고 위에서부터 읽는다면 0, 0, 1이므로
2진수로 변환하게 된다면 0.001이 된다.
해당 2진수는 예시로 들기엔 너무 간단한 모양이니
7.125를 2진수로 바꿔주자
111.001이 될것이다.
해당 고정 소수점을 1.xxxx 형태로 표현하는 것을 정규화 라고 한다.
고정소수점
고정소수점을 그림으로 표현해 보도록 하겠다. 32비트 기준일때이다.
부호부는 양수 0 음수 1로 표현을 한다.
지수부 8자리
가수부 23자리
고정 소수점의 특징은 소수점의 위치를 미리 찍어둔다는 것이다.
빨간네모 : 부호부
초록네모 : 지수부
노란네모 : 가수부
111 뒤에 점은 고정소수점.
부동소수점
앞선 예시를 가지고 정규화를 해보자.
1.11001 x 2^2가 된다.
10^2가 아닌 이유는 2비트로 표현했기 때문이다.
여기서 가수부 23자리는 뒤쪽에 위치하는데 왼쪽부터 써서 11001을 그대로 써준뒤 나머지는 0으로 채워주면 된다.
그렇다면 지수부가 남을텐데.
지수부는 2^n 에서
n의 값을 적으면 된다. 우리는 정규화를 해서 1.11001x2^2 형태로 바꿔놨기 때문에
n의값이 2라는걸 알 수 있다.
2를 이진수로 나타내면 10이다.
하지만 우린 이곳에 그대로 쓸수없다. IEEE 754 표현식을 따라가야하기 때문이다.
IEEE754는 bias라는 숫자를 더한뒤 이진수로 바꿔줘야한다.
bias는 127이므로 127 + 2를 해준다.
129를 2진수로 표현하면 이렇다.
10000001
그럼 여기서 bias는 왜 더해주는 것일까?
지수부가 음수가 될 수 있기 때문이다.
이진수 0.00000111 을 예로 들어보자.
해당 정규화를 마치면 1.11x2^-6 이 된다.
음수를 표현하자니 지수의 부호비트를 만들어줘야 표현할 수 있다. 하지만 그럼 자릿수가 늘어나므로 편리한 방법을 찾아 나선것이 bias이다.
0~127은 음수, 128~255는 양수를 씀으로써 모두 표현이 가능하도록 한것이다.
32비트: 부호부 1비트 지수부 8비트 가수부 23비트
64비트: 부호부 1비트 지수부 11비트 가수부 52비트
고로 32비트의 bias는 2^8이므로 127, 64비트의 bias는 2^11이므로 1023이다.
부동소수점을 그림으로 표현해 보도록 하겠다. 32비트 IEEE 754 표현식이다.
앞선 고정소수점과 같이 부호부는 양수 0 음수 1이다
빨간네모:부호부
초록네모:지수부
노란네모:가수부
이로써 부동소수점과 고정소수점에 대해 간단히 알아보았다.
상식으로만 알고있자.
'IT Program > Java Basic' 카테고리의 다른 글
자바(java) 다중배열(array), 이차원 배열 for문, 이차원 랜덤 배열 (2) | 2022.03.05 |
---|---|
자바(java) for문으로 배열만들기 & 랜덤 배열 생성 & 증가하는 배열 생성 (0) | 2022.03.05 |
자바(java) 클래스 생성 단축키, 새로운 출력 방법(printf), 이스케이프, 서식 지정자(%d, %s, %c, %f...) (2) | 2022.03.04 |
자바 메모리 관리 스택(stack) & 힙(heap) 영역 설명, 예시 (6) | 2022.03.02 |
자바 배열(array) & 배열 출력 & 배열 for문 & 배열.length & 배열 에러 (0) | 2022.03.02 |