#include(stdio.h)
main()
{
float a=123456789.0e-5f;
printf("소수점 a = %6.1f 지수점 a = %e|n", a, a);
}
답이 소수점 a = 1234.6 지수형 a = 1.234568e + 03
인데, 왜 이렇게 되는지 모르겠습니다.
책을 보니 소수점 a = %6.1f의 6이 소수점 포함 여섯자리를 가리키는 것 같다는 것 만 알겠는데요.
안녕하세요 길벗수험서 운영팀입니다.
%6.1f 에서
% - 서식지정자임을 나타내고,
6 - 소수점을 포함한 총 자리수
.1 - 소수자리수의 개수(소수 둘째자리에서 반올림한 첫째자리까지만 표현)
f - 실수로 표현
이 됩니다.
%e 는 실수를 수학의 지수식으로 표현하는 것입니다.
컴퓨터 실수표현은 소수점 6째자리까지가 기본이니 7번째 자리에서 반올림하여 6째자리는 7이 아닌 8이 된 것이죠.
행복한 하루되세요 :)
-
관리자2020-01-10 09:27:40
안녕하세요 길벗수험서 운영팀입니다.
%6.1f 에서
% - 서식지정자임을 나타내고,
6 - 소수점을 포함한 총 자리수
.1 - 소수자리수의 개수(소수 둘째자리에서 반올림한 첫째자리까지만 표현)
f - 실수로 표현
이 됩니다.
%e 는 실수를 수학의 지수식으로 표현하는 것입니다.
컴퓨터 실수표현은 소수점 6째자리까지가 기본이니 7번째 자리에서 반올림하여 6째자리는 7이 아닌 8이 된 것이죠.
행복한 하루되세요 :)
-
관리자2020-01-15 09:36:27
안녕하세요 길벗수험서 운영팀입니다.
해당 문제의 경우 수학의 지수(e)표현이 먼저 학습되어있어야 이해가 가능한 문제입니다.
123456789.0e-5는 단순 지수형 숫자입니다. (뒤의 f는 해당 숫자가 float형이라는 것을 의미합니다.)
지수 표현은 일반 실수에서 * 또는 /가, + 또는 -로 변형된 형태로 표기됩니다.
(실수)e(* > + 또는 / > -)(10의 승수)
예를 들어, 123.45 를 진수부가 한자리인 수로 표현하기 위해서는 나누기 100을 하면 되니 아래와 같이 표현할 수 있습니다. (진수부 : 실수에서 . 왼쪽부분, 즉 정수부분을 말합니다.)
123.45/100*100
= 1.2345*10^2
이것을 지수표현으로 바꾸게 되면,
1.2345e+2 가 되죠.
(10^2 는 10의 2승을 의미합니다. 10x10으로 100이죠. 3승이면 10x10x10=1000)
(문자 'e'는 해당 수가 '지수'라는 것을 의미합니다.)
0.00123을 진수부 한자리인 수로 표현하기 위해서는 곱하기 1000을 하면 되니 아래와 같이 표현이 가능합니다.
0.00123*1000/1000
=1.23/10^3
이것을 지수표현으로 바꾸게 되면,
1.23e-3 이 되죠.
해당 문제는 위와 같은 방식으로 풀어보시면 됩니다.
123456789.0e-5는 풀어보면 아래와 같은 수가 됩니다.
123456789.0/10^5 = 1234.56789
이것을 지수부 한 개만 남겨두면
1.23456789*10^3
지수로 고쳐쓰면
1.23456789e+3
여기서 문제는 C에서 별다른 서식지정자를 쓰지 않으면 실수는 소수점 7번째 자리에서 반올림된 6자리만 출력된다는 것입니다. 이것은 지수표현 또한 마찬가지 입니다. 소수점 7번째 자리인 8에서 반올림 하면 6번째 자리인 7이 1 증가하여 8이 됩니다. 수로 표현하게 되면
1.234568e+3이 되는 것이죠.
요렇게 정답이 나옵니다.
행복한 하루되세요 :)
-
*2020-01-14 13:05:34
답글은 알겠습니다.
그럼 123456789.0e-5f 는 "지수 123456789.0 빼기 실수 5" 라는 뜻입니까?
그리고 1.234568e+03 의 "03" 은 어디서 나온 건가요?