페이지가 로드되지 않나요? 여기를 눌러보면 고쳐질 수도 있어요.
Placeholder

#5024

부동소수점 (Floating Point):단정도 1s 32MB

문제

컴퓨터에서 실수를 표현하는 방법은 정수에 비해 훨씬 복잡하다다.

왜냐하면, 컴퓨터에서는 실수를 정수와 마찬가지로 이진수로만 표현해야 하기 때문이다.

그래서 현재 고정소수점 방식부동소수점 방식, 두가지 방법을 사용하고 있다.

​우리는 그 중 IEEE 754 표준 부동소수점 표현방식에 대해서 알아보려고 한다. 

참고로 부동소수점에서 부동은 움직이지 않는다는 뜻의 부동(不動)이 아니라, 소수점이 떠다닌다는 의미의 부동(浮動)이다.

컴퓨터에서의 단정도 부동소수점 표현은 아래 그림과 같이 부호부, 지수부, 가수부의 세 부분으로 구성된다.​

- 부호부 (Sign): 1비트. 숫자의 부호를 나타내며, 양수일 때 0, 음수일 때 1.

- 지수부 (Exponent): 8비트. 지수를 나타낸다.

- 가수부 (Mantissa): 23비트. 가수 또는 유효숫자를 나타낸다.


[부호부]

첫번째로 부호는 양수 아니면 음수이기에 1비트로 표현이 가능하다. 양수이면 0, 음수이면 1로 표현하면 된다.

[가수부]

두번째로 숫자의 절대값을 이진수로 변환한다.​

예를 들어 11.6251011.101_{(2)}이 된다.

그리고 이진수를 정규화시킨다. 그러면 1011.1011.011101 \times 2^3가 된다.

소수점의 오른쪽 부분 011101​을 가수부 23비트의 앞에서부터 채워주고, 나머지는 0으로 채운다.

(소수점 앞에 숫자는 언제나 1이기에 신경쓰지 않는다)​

[지수부]

1.011101 \times 2^3에서 지수는 3이다. 

하지만 0.231을 같은 방식으로 바꿔보면 1.1101 \times 2^{-3}이 되어 지수가 -3이 되기에 문제가 생길 수 있다.

그래서 이러한 문제를 해결하기 위하여 지수부는 지수에 127(bias:편향)을 더한 값을 사용한다. (bias는 2^k - 1이다. k는 지수부의 비트수 8이다.)

bias인 127을 더한 지수 130을 이진수로 바꾼다.

130의 이진수인 10000010_{(2)}이 지수부가 된다.

결과적으로 11.625를 부동소수점으로 나타내면 0 10000010 01110100000000000000000 이 된다.

십진수인 실수 N을 입력받아 부동소수점 방식으로 표현하라.


입력

-1\,000\,000 \le N \le 1\,000\,000 의 float 값이 입력된다.


출력

부호부(S) 1자리,  지수부(E) 8자리, 가수부(M) 23자리를 한칸 공백을 기준으로 띄어서 한줄에 출력한다.


예제 #1

11.625
0 10000010 01110100000000000000000

예제 #2

-0.231
1 01111100 11011001000101101000100


출처

JUNGOL - klee

로그인해야 코드를 작성할 수 있어요.