C언어 기초 질문입니다.
글쓴이: solomon100 / 작성시간: 금, 2005/05/06 - 12:32오전
#include <stdio.h> main() { float f_amount; double d_amount; f_amount = 123456750.12; d_amount = 123456750.12; printf(" Float type result = %f\n",f_amount); printf("Double type result = %lf\n",d_amount); }
------------------------------------------------------------------------
Float type result = 123456752.000000
Double type result = 123456750.120000
위의 프로그램의 경우 float값이 왜 123456752.000000이 된거지요? Double의 경우는 이해가 가는데 float의 경우는 영...
가수부(3바이트), 지수부(1바이트)이면 충분히 가능한거 아닌가요?
Forums:
float 부분의 유효범위 때문입니다.
float 의 유효범위는 1.18*10**(-38) ~ 3.4*10**38
자리까지 입니다. 하지만 float 의 변수가 선언되었을때
메모리 내의 구조를 보면
31 30 23 22 0
┌─┬────┬───────────┐
S exp fraction
으로 되어있습니다.
따라서 지수부가 아닌 숫자부분에서의 유효부분은
8자리 만이 유효하게 됩니다.
그리고 부호부분때문에 정확한 숫자부분의 유효범위는
7자리가 되게 됩니다.
따라서 123456750.12 에서 앞쪽 유효범뒤인
1234567 까지가 유효범위가 되고 뒤에 5는 유효범위뒤의
가운데 숫자 이며 2부터는 임의의 숫자입니다.
VC++ 에서는 5부터 임의의 숫자가 나올수도 있습니다.
하지만 gcc 에서는 항상 유효부 다음자리에서는 5가 나오는것으로
알고있구요...
따라서 유효부분을 넘어가는 숫자이므로...
1234567******** 라고 출력이 되는것이고 소수점부분은
defalt 로 자리수만 채우는 것일뿐
유효부분이 아니기때문에 출력되지 않습니다.
(ㅎㅎ 제가 잘설명드린건지는 모르겠지만~ 많은도움 되셨으면 합니다.)
자세한 내용은 다음 링크를 참고하시길 바랍니다.
C언어의 변수 float와 double - Float Point 처리
Can You See 1% of chance??
So that is MY WAY !!!
답변 감사합니다.^^
자세한 답변 감사드립니다.^^ :D
^ㅡ^* 도움이 되셨다니 다행이네요
저도 이거 보고 궁금해서...
직접 윈도우랑 리눅스에서 프로그래밍을 해보고..
변수를 다르게 비교해 보고했는데....
재미 있더라구요 ㅎ
다음에 또 뵈요 ^^
Can You See 1% of chance??
So that is MY WAY !!!
댓글 달기