문제1155--[기초-입출력] 실수 1개 입력받아 그대로 출력하기(설명)(C)

1155: [기초-입출력] 실수 1개 입력받아 그대로 출력하기(설명)(C)

[만든사람 : 전현석, 정종광(채점데이터 및 확인), 배준호(확인), 최웅선(확인), 김지혜(그림) (2013)]
시간제한 : 1.000 sec  메모리제한 : 128 MiB

문제 설명

본 문제는 C 의 빠른 기초 학습을 위해 설계된 문제로서 C 코드 제출을 기준으로 설명되어 있습니다.
------

실수(real number)는
-1.602, -0.1, 1.414, 3.1415, 99.9, 365.2425 와 같이
정수로 딱 떨어지지 않는 작은 수들이 소수점 아래에 더 있는 수라고 할 수 있다.

어떤 실수 값을 컴퓨터에 저장시킨 후
컴퓨터에 저장되어 있는 값을 실수로 출력해 보자.

프로그램을 실행한 후 실수값을 1개 입력하면 그 값을 변수에 저장하고,
변수에 저장된 실수값을 출력해야 한다.

예시
#include <stdio.h>

int main()
{
  float x;
  scanf("%f", &x);
  printf("%f", x);
  return 0;
}
와 같은 방법으로 가능하다.

프로그램을 실행한 후,
적당한 실수를 1개 입력하고 엔터를 누르면,
그 값이 x에 저장되고, x에 저장된 값이 실수로 출력된다.


참고

...

float x;                //실수 값을 저장할 float 형 변수 x를 만들어라! 

scanf("%f", &x);  //float 형 실수 1개 형식으로 입력한 실수 값을 x에 저장해라! 
printf("%f", x);    //x에 저장되어 있는 값을 float 실수 형식으로 출력해라!

...

float 는 소수점(.)의 영어 단어인 floating point 에서 왔다고 생각할 수 있다.
float 형으로 저장공간을 만들면, 232가지의 실수 값을 저장할 수 있다.
float 형으로 저장할 수 없는 더 크고, 더 정확한 실수 값을 저장하기 위해서는 64비트 double 형으로 만들어진 저장공간에 저장할 수 있다.

컴퓨터 안에는 0 또는 1로 표현할 수 있는 값들만 저장할 수 있기 때문에
실수값을 저장할 때에도 0 또는 1로 바꾼 특별한 형태의 2진수 값으로 저장해야만 한다.
그러면서, 서로 덧셈도 되고, 계산도 되어야 했다.
그래서...
float 형 0.15625 는 0 01111100 01000000000000000000000 로 저장한다.





10진수 +0.15625 는 2진수로 바꾸면 +0.00101 이 된다.
2진수 + 0.00101 은 1.01 * 2-3 이다.
양수(+) 이니 가장 왼쪽에 0
127+ -3 = 124 이고, 124는 2진수로 바꾸면 01111100 이 된다.
1.01 * 2-3 에서 1. 다음 부분이 01 이므로 23비트로 채우면 01000000000000000000000 이 된다.

따라서,
10진수 +0.15625 는 float 형으로 저장하면
0 01111100 01000000000000000000000 으로 저장된다.

하나 더 예를 들어,
실수 +0.3 은
2진수로 바꾸면 0.010010100101001010010100101001... 처럼 순환하는 무한소수가 된다.
이를 1.XXXX * 2? 형태로 바꾸면 1.0010100101001010010100101001.... * 2-2 으로 바꿀 수 있다.
이제!
양수이기 때문에 가장 왼쪽은 0(음수인 경우 1로 저장한다.)으로 저장하고
2의 지수승 부분 -2에 127을 더하면, 127 + -2 = 125가 되고, 이는 01111101 이다. 이를 8비트로 저장하고
1.0010100101001010010100101001.... * 2-2 에서 소수점 아래 23비트만 순서대로 저장하면
0 01111101 00101001010010100101001 가 된다.

따라서, 실수 +0.3 을 float 형으로 저장하면
0 01111101 00101001010010100101001 로 저장된다.
10진수 실수 0.3을 2진수 형태로 바꾸면 무한히 순환하는 소수부분이 있지만, 32비트 근사값으로만 저장되는 것이다.

주의
컴퓨터 내부에는 0과 1의 비트 조합으로만 저장되어야 하기 때문에, 실수 값을 정확하게 저장하지 못하는 경우가 많다.
정확한 계산이 필요한 작업에서 실수 계산을 실행할 때에는 계산 오차에 대해서도 주의 깊게 생각해야 한다.
32비트 float 형으로 원하는 정확도의 값을 저장하거나 계산하지 못하는 경우에는, 64비트 double 형으로 만들어 조금 더 정확한 값을 계산할 수도 있다.
따라서 매우 기본적으로! 컴퓨터를 사용해 정확한 계산을 하기 위해서는 정수 값으로만 계산을 하고, 실수 계산을 최소화하도록 해야 한다.

입력 설명

실숫값 1개가 입력된다.
(float 로 저장하고 출력할 수 있는 실숫값만 입력된다.)

출력 설명

저장된 실숫값을 출력한다.

입력 예시 Copy

1.414213

출력 예시 Copy

1.414213

도움

기초100제(c)1 v1.5 : 정보교사 커뮤니티 @컴퓨터과학사랑(CSL)
- 중고등학교 정보 선생님들과 함께 정보수업/방과후/동아리활동 등을 통해 재미있게 배워보세요.
- 모든 내용 및 이미지들은 저작자와의 협의 없이 무단으로 사용할 수 없습니다.

출처/분류