c언어 float값 소수점 출력값 이해가 전혀 안됩니다.
글쓴이: sperole / 작성시간: 수, 2019/03/13 - 6:19오후
#include <stdio.h> int main() { float a = 123456789e-5f; float b = 121.123456; printf("a 는 %6.1f %e 입니다\n", a, a); printf("b 는 %10.6f 입니다", b); return 0; }
의 결과가
a 는 1234.6 1.234568e+03 입니다
b 는 121.123459 입니다
라고 나오는데
소수점 부분이 전혀 맞지 않습니다.
제가 책에서 배우기를 %6.1f 는 6자리를 확보해놓고 소수점 1자리까지 출력 이라고 배웠는데
%e 값도 1.23456789e+03이 아닌 1.234568e+03이라는 것도 이해가 가지 않습니다.
ㅜㅜ 알려주세요
Forums:
입력한 값 자체가 무한 소수이기 때문에 정확하게
float 는 유효자리 수가 10진수로 7자리 정도죠.
유효수자를 10개로 해 봐야 아예 입력도 안 된다는 말씀.
따라서 출력된 값은 맞는 값입니다.
또한 입력한 값 자체가 무한 소수이기 때문에 7자리 이내로 해도 정확하게 입력되지 않습니다.
0.1 도 2진법에서는 무한 소수이기 때문에 부정확한 값이 되죠.
0.5 나 0.25 같이 2진법에서 유한한 수로 계산하면 정확하게 나올 겁니다.
부동 소소점 정말로 신기한 세상이죠.
부동 소수점 정말로 신기한 세상이죠.
사람은 1/7 + 1/7 + 1/7 + 1/7 + 1/7 + 1/7 + 1/7 이 1인지 알지만
컴퓨터 세상에서는 반듯이 1이 아닙니다.
해답은 컴퓨터에서 실수는 '부동 소수점'(=IEEE 754)으로 표현되기때문입니다.
이거 백문이 불여 일견이라고 아래 사이트 같은 곳을 찾아 이리 저리 실험을 해 보시기 바랍니다.
------------
"IEEE 754 Calculator" : http://weitz.de/ieee/
댓글 달기